zoukankan      html  css  js  c++  java
  • 爬虫(成都58同城所有房价,Python实现)

    Python实现爬虫(爬取58同城所有房价)

    程序发布日期2018-9-25(如果以后不能使用了,就需要更改解析方式.)
    github博客传送门
    csdn博客传送门

    爬虫文件(Python实现)-爬取的数据文件(txt文件,空格分隔)-分析的文件(Python实现)-简单的分析结果图(png图4张) 资源链接地址:https://download.csdn.net/download/zhanghao3389/10686953

    本章所需知识:

    分析页面链接(pandas+numpy+matplotlib):https://blog.csdn.net/zhanghao3389/article/details/82845263

    接下来上代码:

    import urllib.request  # 打开网页,读取网页内容用
    from lxml import etree  # 解析网页用
    import time  # 这里只使用了暂停程序的作用
    
    url = 'https://cd.58.com/ershoufang/pn{}'  # 需要解析的网页
    
    # 定义了一个获取网页的方法 (http请求)
    def getHtml(url):
        response = urllib.request.urlopen(url)  # 打开获取的链接
        print(response.getcode())  # 返回一个网页打开的状态码
        html = response.read()  # 将获取的网页写入html
        return html  # 返回给调用者
    
    # 定义了一个解析网页的方法 (解析器)
    def parserHtml(html):  # 将一个下载好的html传入解析器
        html_text = etree.HTML(html)  # 将html转换成xpath可以解析的格式
        message_list = html_text.xpath('/html/body/div[5]/div[5]/div[1]/ul/li')  # 解析到每个li元素的位置
        for message in message_list:  # 遍历所有的li元素
            region = message.xpath('./div[2]/p[2]/span/a[2]/text()')  # 解析地理位置
            price = message.xpath('./div[3]/p[1]/b/text()')  # 解析房子的价格
            company = message.xpath('./div[3]/p[1]/text()')  # 解析房子的价格单位
            area = message.xpath('./div[2]/p[1]/span[2]/text()')  # 解析房子的面积
            unit_price = message.xpath('./div[3]/p[2]/text()')  # 解析房子的单价
            area = area[0].strip()  # 将房子的面积后的空格去掉(房子的面积参数后面有个 html的空格 跟我们写入的格式不一样所以必须去掉才能写入到本地)
            b = '{0} {1} {2} {3}'  # 占位符(将每个数据中间添加一个空格隔开,便于后续导入excel)
            a = b.format(region[0], price[0] + company[0], area, unit_price[0])  # 将爬取的数据格式化
            print(a)  # 打印出格式化后的数据
            with open('message.txt', 'a') as f:  # 打开一个文件存入格式化后的文件
                f.write(str(a))  # 将数据写入文件
                f.write('
    ')  # 写入一个换行符
    
    # 主函数
    for i in range(1, 70):  # 遍历69次(看了一下网站 大概只有70页 为了不增加程序难度 手动翻69次)
        print('第{}页'.format(i))  # 打印正在爬取第几页
        url1 = url.format(i)  # 将url格式化 传入页数
        html = getHtml(url1)  # 下载html (将格式化好的url1传入 getHtml 方法中)
        parserHtml(html)  # 解析html (将下载好的 html 传入 parserHtml 方法中解析)
        time.sleep(1)  # 暂停一秒 (有时候有检测会封 ip 然后将暂停时间调大一点 手动进入浏览器将验证码输入一遍就可以重新爬取了.
    

    分析页面链接(pandas+numpy+matplotlib):https://blog.csdn.net/zhanghao3389/article/details/82845263

    程序运行状态图:
    1
    2
    3

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/Mrzhang3389/p/9703655.html
Copyright © 2011-2022 走看看