Python玩爬虫,爬取安居客租房数据
蚂蚁学Python
共 4266字,需浏览 9分钟
· 2022-05-13
前言
最近我打算在西安市长安区租个房子,于是打开安居客官网进行浏览,点击了航天一小区域结果搜索出了一堆房源信息,为了综合比较找出更加适合我的选择,我敲了个代码将租赁数据批量爬取了下来。对于如何翻页爬取数据这个难题,我苦思冥想了一早上,突然想起蚂蚁老师的《零基础学Python简单爬虫》中教过我如何翻页爬取他的博客。我赶快去网易云课堂上回顾了一下知识点,很快就解决了难题!
1.导入python库
import requests
import parsel
import csv
2.编写请求头
首先打开安居客网站的主页,然后点击选择西安市长安区租房,再点击我感兴趣的航天一小区域。按F12进入开发者模式,用开发者工具搜索“航天城 航天一小一中 航天城二期主卧 神州六路 领包入住”,搜索出数据包后获取cookie、referer和user-agent,编写请求头可以在请求数据时防止被反爬。
headers = {
"cookie":"SECKEY_ABVK=TgvSiy4m0B6i5M/GnutrL4MCQAxmauku4aF+LqjfcV8%3D; BMAP_SECKEY=E59uL36Kjw3iB4ZVJ1TzktcDRrwsPacuhFPlFvVySikxHflBOrAIKvnT_TWYzT5URefDsASa2VWCiaIX9be4V3Lnrh_Nos62tZXNwvoSq4VTzasiJ1egkq-odC5S4rdqxoaD8o2T1GJGf2QcMzz9qmHUmR4U12vFef9JGFoyWvQ; aQQ_ajkguid=480A83B5-6C24-CA9A-70C4-SX0705130713; isp=true; id58=e87rkGDik4M4TQ8rCOH9Ag==; 58tj_uuid=646ff6e2-1cdd-40ea-a598-19787fe938e3; als=0; _gid=GA1.2.1430887075.1652243486; _ga=GA1.2.365181464.1652243486; ajk-appVersion=; ctid=31; fzq_h=66195fd3068b1f875345633f8c10fa4a_1652243654423_6c16e54157d8446097cc7e59ed9481e0_2102187861; cmctid=483; wmda_visited_projects=%3B6289197098934; wmda_new_uuid=1; wmda_uuid=82b87a341ccf0eac3db311b6b0810093; sessid=89F34445-4127-728C-6A4A-B58CD71D8F23; twe=2; init_refer=https%253A%252F%252Fcn.bing.com%252F; new_uv=5; lps=https%3A%2F%2Fxa.zu.anjuke.com%2F%3Ffrom%3Dnavigation%7Chttps%3A%2F%2Fxa.anjuke.com%2F; wmda_session_id_6289197098934=1652272846315-4adb7df7-8ce6-9b96; obtain_by=2; new_session=0; xxzl_cid=ef3f8b7b219341ee8f8b5d044cccd51f; xzuid=eb4ac9b2-89df-4969-9661-9e99a843bd43",
"referer":"https://xa.zu.anjuke.com/fangyuan/changanb/",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39",
}
3.创建csv文件
创建好CSV文件后,我们可以用下面的方式添加表头
f = open('安居客租房数据.csv',mode='a',encoding='utf-8',newline='')
csv_writer = csv.DictWriter(f,fieldnames=['标题','房子类型','楼层','价格','小区','地址','详情'])
csv_writer.writeheader() #写入表头
4.解析数据、翻页爬取
大家可以用选择工具,点击需要爬取的数据,找到数据的源代码,然后右键点击“复制selector”,这样不用非常熟悉CSS语法也可以轻松的解析数据
for page in range(1,3): #数据只有两页,用for循环进行翻页爬取
url = f'https://xa.zu.anjuke.com/fangyuan/changanb-q-htyxxa/p{page}/'
r = requests.get(url = url,headers = headers)
selector = parsel.Selector(r.text)
zu_infos = selector.css('.zu-itemmod') #用CSS选择器,提取每页所有房子数据的信息
for info in zu_infos:
try:
title = info.css('.strongbox::text').get() #解析出标题
house_num = info.css('div.zu-info > p.details-item.tag > b::text').getall() #提取出所有b标签的文本数据,即户型数值
p = info.css('div.zu-info > p::text').getall() #提取出所有p标签的文本数据,变量p是个列表
p = p[1:5] #去掉无用信息
height = p[-1].strip(' ') #提取出房子所在的楼层
house_unit = p[:3] #提取户型单位
house_type = [house_num[i] + house_unit[i] for i in range(len(house_num))] #将户型数字与户型单位进行字符串拼接
house_type = ' '.join(house_type) #列表中各个字符串元素用空格连接
price = info.css('div.zu-side > p > strong > b::text').get() + '元/月' #解析出房源的价格
community = info.css('div.zu-info > address > a::text').get() #提取小区名称
address = info.css('div.zu-info > address::text').getall()[1].strip('\xa0\xa0\n ') #提取房子所在地址
detail = info.css('div.zu-info > p.details-item.bot-tag > span::text').getall() #提取:租赁方式、朝向、有无电梯、附近有哪条地铁
detail = ' '.join(detail) #列表中各个字符串元素用空格连接
print(title,house_type,height,price,community,address,detail)
dit = {
'标题': title,
'房子类型':house_type,
'楼层':height,
'价格': price,
'小区': community,
'地址': address,
'详情': detail,
}
csv_writer.writerow(dit) #写入csv
except:
pass
得到所有数据后有时候Excel直接打开会乱码,大家可以先用记事本打开,然后另存为时编码格式改为“ANSI”编码,最后再用Excel打开就好了。现在我可以在Excel里慢慢查看这些房源是否满足自己的要求,希望我能安全、省心,用最低的交易成本租到满意的房子,希望大家也能有所收获!
最后,推荐蚂蚁老师的视频课程,购买课程提供答疑服务、付费群聊
评论
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
小美播报|3月IPTV数据排行榜发布!
小美播报3月IPTV数据排行榜:《与凤行》登顶连续剧榜榜首拥有4.05亿家庭用户的中国IPTV平台已经成为国内主流视听平台,IPTV平台数据对视听产业各环节都具有重要意义。截至2024年4月,全国已有29个省级IPTV加入“看中国”,覆盖全国超2.25亿户家庭、辐射近7亿人。点击查看详情湖南广电与马
流媒体网
0
CleverCSV,一个神奇的 python 库!
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源丨网络介绍CleverCSV 是一个基于 Python 的库,旨在提供比标准库 csv 更智能和灵活的方法来处理 CSV 文件。该库使用机器学习算法来探测 CSV 文件的正确拨号结构,从而
菜鸟学Python
0
python读取多个excel表多个sheet后映射匹配再分组计算、纵向拼接
大家好,我是飞奔的蜗牛ing。一、前言前几天在一个客户给到一单数据处理的 问题,需求是这样的:1.表“aa2020”中2020年数据需要按季度分成四个表。(1-3月、4-6月、7-9月、10-12月)2.表“2020年一季度”代表2020年一季度客户所对应的管理档位,需要把表中的档位导入附表“aa2
IT共享之家
0