python爬取链家二手房楼盘数据信息

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

想看下最近房价是否能入手,抓取链家 二手房 、 新房 的信息,发现广州有些精装修 88平米 的 3房2厅 首付只要 29 万!平均 1.1万/平:

查看请求信息

本次用的是火狐浏览器32.0配合 firebug 和 httpfox 使用,基于 python3 环境,前期步骤:

首先打开 firefox 浏览器,清除网页所有的历史纪录,这是为了防止以前的 Cookie 影响服务器返回的数据。

F12 打开 firebug ,进入链家手机端首页https://m.lianjia.com,点击 网络 -> 头信息 ,查看请求的头部信息。

发现请求头信息如下,这个是后面要模拟的:

Host: m.lianjia.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateConnection: keep-alive

查看导航链接

点击 firebug 的查看元素箭头,选中导航查看元素:

发现导航的主要是在 class=inner post_ulog 的超链接元素 a 里面,这里用 BeautifulSoup 抓取名称和 href 就好,最后组成一个字典:

结果如下:

{'海外':'/i/','卖房':'/bj/yezhu/','新房':'/bj/loupan/fang/','找小区':'/bj/xiaoqu/','查成交':'/bj/chengjiao/','租房':'/chuzu/bj/zufang/','二手房':'/bj/ershoufang/index/','写字楼':'https://shang.lianjia.com/bj/'}

获取城市编码

点击页面低于按钮,获取城市编码:

发现城市的编码主要在 class=block city_block 的 div 里面,如下抓取所有就好,这里需要的是广州,广州的城市编码是 gz :

结果如下:

{'文昌':'/wc/','大理':'/dali/','威海':'/weihai/','达州':'/dazhou/','中山':'/zs/','佛山':'/fs/','呼和浩特':'/hhht/','合肥':'/hf/','南昌':'/nc/','昆明':'/km/','定安':'/da/','宜昌':'/yichang/','襄阳':'/xy/','嘉兴':'/jx/','厦门':'/xm/','青岛':'/qd/','株洲':'/zhuzhou/','西安':'/xa/','泉州':'/quanzhou/','济南':'/jn/','澄迈':'/cm/','潍坊':'/wf/','保定':'/bd/','绵阳':'/mianyang/','重庆':'/cq/','儋州':'/dz/','南充':'/nanchong/','南京':'/nj/','北京':'/bj/','杭州':'/hz/','滁州':'/cz/','咸宁':'/xn/','琼海':'/qh/','洛阳':'/luoyang/','绍兴':'/sx/','廊坊':'/lf/','惠州':'/hui/','南通':'/nt/','上饶':'/sr/','湛江':'/zhanjiang/','秦皇岛':'/qhd/','黄石':'/huangshi/','武汉':'/wh/','天津':'/tj/','哈尔滨':'/hrb/','黄冈':'/hg/','龙岩':'/ly/','长春':'/cc/','珠海':'/zh/','邢台':'/xt/','三亚':'/san/','北海':'/bh/','太原':'/ty/','德阳':'/dy/','万宁':'/wn/','承德':'/chengde/','五指山':'/wzs/','陵水':'/ls/','成都':'/cd/','深圳':'/sz/','咸阳':'/xianyang/','烟台':'/yt/','东莞':'/dg/','清远':'/qy/','西双版纳':'/xsbn/','郑州':'/zz/','淮安':'/ha/','漳州':'/zhangzhou/','常德':'/changde/','邯郸':'/hd/','上海':'/sh/','开封':'/kf/','苏州':'/su/','衡水':'/hs/','无锡':'/wx/','广州':'/gz/','银川':'/yinchuan/','徐州':'/xz/','大连':'/dl/','海口':'/hk/','晋中':'/jz/','福州':'/fz/','新乡':'/xinxiang/','沈阳':'/sy/','琼中':'/qz/','乐东':'/ld/','淄博':'/zb/','眉山':'/ms/','宁波':'/nb/','张家口':'/zjk/','保亭':'/bt/','长沙':'/cs/','临高':'/lg/','石家庄':'/sjz/','许昌':'/xc/','镇江':'/zj/','乐山':'/leshan/','贵阳':'/gy/'}

模拟请求二手房

点击二手房链接进入二手房列表页面,发现列表页面的 url 是 https://m.lianjia.com/bj/ershoufang/index/ ,把网页往下拉进行翻页,发现下一页的 url 构造为:

只是在原来的网址后面添加了页码 pg1 ,但是在 httpfox 里面惊奇的发现了一段 json:

对于爬虫的各位作者有个忠告:能抓取json就抓取json!* json 是一个 API 接口,相比于网页来说更新频率低,网页架构很容易换掉,但是 API 接口一般不会换掉,且换掉后维护的成本比网页低。试想,接口只是一个 dict ,如果更新只要在代码里面改 key 就好了;而网页更新后,需要改的是 bs4 里面的元素,对于以后开发过多的爬虫来说,维护特别麻烦!

所以对于这里肯定是抓取 json,查看头部:

头部需要携带 cookie !

所以这里需要携带 cookie。而 requests 本身就有抓取携带 cookie 的写法。那么作者就在从获取导航链接、城市编码都获取更新 cookie。而在每一次 requests 请求的时候,返回 cookie 的代码为:

session.get(url, headers=headers)

html_set_cookie = requests.utils.dict_from_cookiejar(session.cookies)

那么在导航链接、城市编码的时候,不仅仅返回网页的 html ,还多返回一个 cookie :

然后在请求头携带 cookie :

这里也模拟请求头携带 cookie 后抓取下来的 json 为:

而主要的信息在 body 里面,直接解析 html 变成 dict ,提取 body 出来:

发现信息都在 class=item_list 里面,直接用 bs4 抓取即可。可以抓取到的信息为:标题、标签、房子构造、面积、总价、单价、房屋朝向、详情页 url 等:

获取信息的部分代码为:

封装代码

为了让代码更加的和谐,这里对代码进行了封装,包括如下几个方面:

选择城市

选择查看二手房、新房等

详情页抓取页数

计算首付

按照首付升序排列

目前只写那么多了,毕竟博文只教方法给读者,更多抓取的信息需要各位读者根据自己的需求添加

要实现Python爬取链家二手房数据可视化,可以按照以下步骤进行操作: 1. 使用Scrapy框架进行分布式爬取链家二手房数据。Scrapy是一个强大的Python爬虫框架,可以帮助我们快速高效地爬取网页数据。可以使用Scrapy编写爬虫程序,设置爬取的起始URL和相关的爬取规则,然后通过分布式爬取多个页面的数据。 2. 将爬取到的数据存储到MySQL数据库中。可以使用Python的MySQL库连接到MySQL数据库,并将爬取到的数据存储到数据库中。可以创建一个表来存储二手房的相关信息,例如房源名称、价格、面积等。 3. 使用pandas进行数据清洗和分析。pandas是一个强大的数据处理和分析库,可以帮助我们对爬取到的数据进行清洗和分析。可以使用pandas读取MySQL数据库中的数据,并进行数据清洗、处理和分析,例如去除重复数据、处理缺失值、计算统计指标等。 4. 使用可视化库进行数据可视化。Python有很多强大的可视化库,例如matplotlib、seaborn和plotly等。可以使用这些库来绘制各种图表,例如柱状图、折线图、散点图等,以展示二手房数据的分布、趋势和关联性。 以下是一个示例代码,演示了如何使用Scrapy爬取链家二手房数据,并使用pandas和matplotlib进行数据清洗和可视化: ```python import scrapy import pandas as pd import matplotlib.pyplot as plt class LianjiaSpider(scrapy.Spider): name = 'lianjia' start_urls = ['https://www.lianjia.com/ershoufang/'] def parse(self, response): # 解析页面数据,提取二手房信息 # ... # 将数据存储到MySQL数据库中 # ... yield item # 使用命令行运行爬虫 # scrapy crawl lianjia # 从MySQL数据库读取数据 data = pd.read_sql('SELECT * FROM lianjia', 'mysql://username:password@localhost/lianjia') # 数据清洗和分析 # ... # 绘制柱状图 plt.bar(data['区域'], data['价格']) plt.xlabel('区域') plt.ylabel('价格') plt.title('链家二手房价格分布') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值