爬虫(成都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('\n')  # 写入一个换行符

# 主函数
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

posted @ 2018-09-25 21:28  账号  阅读(1074)  评论(0编辑  收藏  举报