50 行代码爬取链家租房信息
最近自己开始学习数据分析的技术,但数据分析最重要的就是数据。没有数据怎么办?那就自己爬一些数据。大家一定要记得爬虫只是获取数据的一种手段,但如果不用一系列科学的方式去分析这些数据,那么爬去下来的数据是毫无用处的。所以爬虫进阶的方向很容易就可以对接到数据分析,我现在就是在往数据分析这个方向靠近。
而今天我们要分析的是链家上海出租房一些信息,从中找出性价比高的租房信息。这是一个系列的文章,我会从最开始的数据获取开始讲解,带大家一步步的完成一个数据分析的过程。话不多说,先来看下链家爬虫代码。
分析目标页面结构
写一个爬虫程序第一步就是分析下这个网页的请求结构和一些链接的变化情况,看看是不是否有规律可循,看看页面是否是动态加载,还是 ajax 加载的。
所以我们先打开链家的网站,先简单的浏览下。
简单的浏览之后,我们就很容易找到链家的规则,即链家下一页的链接都是把 url 最后的 pg 数字给修改下,直至最后一页。
这样我们的爬虫程序思路就有了,首先请求要爬取的页面,获取最大页数,然后用一个 for 循环请求页面直至结束。接下来看下具体的代码实现。
程序结构
程序结构很简单这里我创建了一个 LianJianSpider 的类,在初始化函数中,我定义了一些变量,其中还用到了之前给大家讲解到的 fake_useragent 库,用来随机生成请求头。
def __init__(self):
self.ua = UserAgent()
self.headers = {"User-Agent": self.ua.random}
self.datas = list()
get_max_page()
这个函数主要是用来获取当前页面的最大页数,即下面的图。
图中我圈了两个地方,第一个是页面上显示的内容。第二是浏览器控制台具体的数据位置,然后我通过 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」文件。
50 行代码爬取链家租房信息相关推荐
- python爬虫--爬取链家租房信息
python 爬虫-链家租房信息 爬虫,其实就是爬取web页面上的信息. 链家租房信息页面如下: https://gz.lianjia.com/zufang/ ## python库 Python库 1 ...
- 链家网开源java_异步协程爬取链家租房信息
异步协程抓取链家数据+pandas写入csv import asyncio import aiohttp import pandas from bs4 import BeautifulSoup fro ...
- python爬取链家租房信息_Python爬取链家网上海市租房信息
使用Python进行上海市租房信息爬取,通过requests + Beautifulsoup对网页内容进行抓取和数据提取. import requests from bs4 import Beauti ...
- python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...
因为期末考试的缘故,本打算一个星期结束的爬虫,拖了很久,不过,也有好处:之前写的时候总是被反爬,这几天复习之余写了些反爬取的py code 下面发出来和大家探讨 做了些反爬取的手段 随机获取一个hea ...
- 利用xpath爬取链家租房房源数据并利用pandas保存到Excel文件中
我们的需求是利用xpath爬取链家租房房源数据,并将数据通过pandas保存到Excel文件当中 下面我们看一下链家官网的房源信息(以北京为例) 如图所示,我们通过筛选得到北京租房信息 那么我们需要将 ...
- pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...
- python关于二手房的课程论文_基于python爬取链家二手房信息代码示例
基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...
- python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...
- python爬上市公司信息_实战项目 1:5 行代码爬取国内所有上市公司信息
实战项目 1:5 行代码爬取国内所有上市公司信息 Python入门爬虫与数据分析 在正式开始这门专栏课的学习之前,我们先来看一个简单的爬虫案例.兴趣是最好的老师,当你对爬虫产生兴趣的时候,才会更有动力 ...
最新文章
- php构造和析构方法,php5构造函数与析构函数实例
- django1.4日志模块配置及使用
- IDEA如何将git分支代码合并到master
- oracle 数据库备份恢复
- SMSSMS垃圾邮件检测器的专业攻击
- 美国世态什么样,看这条“K”线就够了
- shell判断是否为root权限(id -u != 0)
- hive 配置mysql_Hive的mysql安装配置
- 2012年十大项目月度得分榜
- BAT[阿里、百度、腾讯]等互联网公司数据结构面试题(一) python分析实现
- 05 Java 求职简历制作
- uplift 模型开源包(causalml)尝试
- 数字日期格式转换yyyymmdd_如何把日期改为yyyymmdd
- LGSVL与Apollo5.0联合仿真
- vue-自定义组件之组件的继承
- 数学专业参考书——学数学的必看
- Flutter从入门到能寄几玩儿
- 衡水年内计划发放万张农民工“一卡通” 防止拖欠工资
- 多类差异信息柔性融合概念与内涵
- IDEA-集成VisualVM插件,启动Java VisualVM
热门文章
- 不撞南墙不回头——深度优先搜索
- 《Effective Modern C++》翻译--条款2: 理解auto自动类型推导
- jMetal学习笔记(二)-NSGAii源码解读
- 深信AF PT1安全实验总结经验
- 高可靠环境 FileNet 系统介绍和应用实例
- armbian清理_N1的ArmbianOpenMediaVault笔记
- 如何组织可持续的团队内部分享
- 开发常用镜像站 - 阿里云镜像站
- Leetcode 36:有效的数独(超详细的解法!!!)
- 强大的分组SectionListView, 支持自定义组头布局和分组的内容布局, 组头有挤压效果