50 行代码爬取链家租房信息 淡淡的烟草味﹌ 2022-02-02 03:25 322阅读 0赞 最近自己开始学习数据分析的技术,但数据分析最重要的就是数据。没有数据怎么办?那就自己爬一些数据。大家一定要记得爬虫只是获取数据的一种手段,但如果不用一系列科学的方式去分析这些数据,那么爬去下来的数据是毫无用处的。所以爬虫进阶的方向很容易就可以对接到数据分析,我现在就是在往数据分析这个方向靠近。 而今天我们要分析的是链家上海出租房一些信息,从中找出性价比高的租房信息。这是一个系列的文章,我会从最开始的数据获取开始讲解,带大家一步步的完成一个数据分析的过程。话不多说,先来看下链家爬虫代码。 **分析目标页面结构** 写一个爬虫程序第一步就是分析下这个网页的请求结构和一些链接的变化情况,看看是不是否有规律可循,看看页面是否是动态加载,还是 ajax 加载的。 所以我们先打开链家的网站,先简单的浏览下。 ![1545135897311392.jpg][] ![1545135897425329.jpg][] ![1545135897550603.jpg][] 简单的浏览之后,我们就很容易找到链家的规则,即链家下一页的链接都是把 url 最后的 pg 数字给修改下,直至最后一页。 这样我们的爬虫程序思路就有了,首先请求要爬取的页面,获取最大页数,然后用一个 for 循环请求页面直至结束。接下来看下具体的代码实现。 **程序结构** ![1545135898519183.jpg][] 程序结构很简单这里我创建了一个 LianJianSpider 的类,在初始化函数中,我定义了一些变量,其中还用到了之前给大家讲解到的 fake\_useragent 库,用来随机生成请求头。 def \_\_init\_\_(self): self.ua = UserAgent() self.headers = \{"User-Agent": self.ua.random\} self.datas = list() get\_max\_page() 这个函数主要是用来获取当前页面的最大页数,即下面的图。 ![1545135898663500.jpg][] 图中我圈了两个地方,第一个是页面上显示的内容。第二是浏览器控制台具体的数据位置,然后我通过 bs4 就可以获取当前最大页。 def get\_max\_page(self, url): reponse = requests.get(url, headers=self.headers) if reponse.status\_code == 200: source = reponse.text soup = BeautifulSoup(source, 'html.parser') a = soup.find\_all("div", class\_="page-box house-lst-page-box") max\_page = eval(a\[0\].attrs\["page-data"\])\["totalPage"\] return max\_page else: print("请求失败 statue: \{\}".format(reponse.status\_code)) return None **parse\_page()** 这个函数主要是用来进行翻页的操作,通过利用一个 for 循环来重构 url 实现翻页操作。而循环最大页数就是通过上面的 get\_max\_page() 来获取到。 再通过 BeautifulSoup 来获取每个租房信息的链接,然后通过 parse\_detail() 这个解析函数,把具体的信息保存成一个字典,解析完一个页面就往 datas 这个列表中添加。最后所有的页面遍历完之后,在用 pandas 库把数据存储为 csv 文件,以便之后数据分析用。 def pares\_page(self, url): max\_page = self.get\_max\_page(url) for i in range(1, max\_page + 1): url = 'https://sh.lianjia.com/zufang/pa\{\}/'.format(i) print("当前正在爬取: \{\}".format(url)) response = requests.get(url, headers=self.headers) soup = BeautifulSoup(response.text, 'html.parser') a = soup.find\_all("div", class\_="info-panel") for j in range(len(a)): try: link = a\[j\].find("a")\["href"\] print(link) detail = self.parse\_detail(link) self.datas.append(detail) except: print('get page link is fail') continue print("所有数据爬取完成,正在存储到 csv 文件中") data = pd.DataFrame(self.datas) data.to\_csv("链家网租房数据.csv", encoding='utf\_8\_sig') **parse\_detail()** 租房页面信息提取函数,主要还是用了 BeautifulSoup 来进行数据的提取。 def parse\_detail(self, url): detail = \{\} response = requests.get(url, headers=self.headers) if response.status\_code == 200: soup = BeautifulSoup(response.text, "html.parser") b = soup.find("div", class\_="content zf-content") detail\["月租金"\] = int(b.find("span", class\_="total").text.strip()) detail\["面积"\] = b.find\_all("p", class\_="lf")\[0\].text\[3:\].strip() detail\["房屋户型"\] = b.find\_all("p", class\_="lf")\[1\].text\[5:\].strip() detail\["楼层"\] = b.find\_all("p", class\_="lf")\[2\].text\[3:\].strip() detail\["房屋朝向"\] = b.find\_all("p", class\_="lf")\[3\].text\[5:\].strip() detail\["地铁"\] = b.find\_all("p")\[4\].text\[3:\].strip() detail\["小区"\] = b.find\_all("p")\[5\].text\[3:\].split('-')\[0\].strip() detail\["位置"\] = b.find\_all("p")\[6\].text\[3:\].strip() return detail else: print("请求失败 statue: \{\}".format(reponse.status\_code)) return None **程序运行结果** 程序运行完之后就会在当前目录下保存一份名为「链家网租房数据.csv」文件。 ![1545135899287606.jpg][] [1545135897311392.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135897311392.jpg [1545135897425329.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135897425329.jpg [1545135897550603.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135897550603.jpg [1545135898519183.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135898519183.jpg [1545135898663500.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135898663500.jpg [1545135899287606.jpg]: https://www.itcodemonkey.com/data/upload/portal/20181218/1545135899287606.jpg
相关 50行代码爬取Top500图书导入TXT文档 50行代码爬取Top500图书导入TXT文档 import re 正则表达式,进行文字提取 import requests import js 一时失言乱红尘/ 2023年01月06日 12:00/ 0 赞/ 6 阅读
相关 北上广深租房图鉴(上)| 小笨聪用python爬取链家租房数据 [微信公众号原文链接][Link 1] 电视剧《恋爱地图上海篇》有一句台词: > 上海很繁华,但没有一点真实的感觉。来这里工作两年了,没有一个朋友,没有一个爱人,我感觉我像 Myth丶恋晨/ 2022年10月01日 06:51/ 0 赞/ 192 阅读
相关 Python | 50行代码爬取猫眼 top100 > 微信公众号:一个优秀的废人 > 如有问题或建议,请后台留言,我会尽力解决你的问题。 ![霸王别姬][1240] 前言 好久不见,已经有一个月没更新了。主要是因 ゞ 浴缸里的玫瑰/ 2022年05月15日 06:45/ 0 赞/ 292 阅读
相关 python爬取链家新房数据 转载:https://blog.csdn.net/clyjjczwdd/article/details/79466032 from bs4 impor 清疚/ 2022年05月09日 02:38/ 0 赞/ 239 阅读
相关 【分享】50行代码!批量爬取大量图片! -- coding:utf-8 -- coding=UTF-8 import os,urllib,urllib2,re 深碍√TFBOYSˉ_/ 2022年04月08日 12:17/ 0 赞/ 199 阅读
相关 爬取链家网所有二手房楼盘信息 代码如下: import requests from lxml import etree import math import time 缺乏、安全感/ 2022年02月04日 17:13/ 0 赞/ 402 阅读
相关 50 行代码爬取链家租房信息 最近自己开始学习数据分析的技术,但数据分析最重要的就是数据。没有数据怎么办?那就自己爬一些数据。大家一定要记得爬虫只是获取数据的一种手段,但如果不用一系列科学的方式去分析这些数 淡淡的烟草味﹌/ 2022年02月02日 03:25/ 0 赞/ 323 阅读
相关 利用python爬取贝壳网租房信息 最近准备换房子,在网站上寻找各种房源信息,看得眼花缭乱,于是想着能否将基本信息汇总起来便于查找,便用python将基本信息爬下来放到excel,这样一来就容易搜索了。 1. 红太狼/ 2021年12月22日 03:45/ 0 赞/ 583 阅读
相关 JAVA爬虫 - 爬取豆瓣租房信息 最近打算换房子,豆瓣上面的租房小组相对来说较为真实,但是发现搜索功能不是那么友好,所以想把帖子的数据都爬到数据库,自己写sql语句去筛选,开搞! 每步过程都贴上完整代码,感兴 柔情只为你懂/ 2021年12月17日 12:04/ 0 赞/ 445 阅读
还没有评论,来说两句吧...