• 爬虫(成都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

  • 相关阅读:
    filter
    列表生成式
    迭代
    切片:练习
    Python FAQ
    活在深圳
    “30岁年薪20万算不算很失败?”人民日报这样回答
    ASP.NET Core 运行原理解剖[1]:Hosting
    Kotlin 初窥门径[2]:流程控制
    Kotlin 初窥门径[1]:基础概念
  • 原文地址:https://www.cnblogs.com/Mrzhang3389/p/9703655.html
Copyright © 2020-2023  润新知