前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐
环境使用:
-
Python 3.8
-
Pycharm
模块使用:
-
requests >>> pip install requests 数据请求模块
-
parsel >>> pip install parsel 数据解析模块
-
csv 内置模块
👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~
素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可
最基本流程: <公式>
一. 数据来源分析
分析我们想要获取的数据内容, 可以请求那个链接能够得到
-
静态网页: 我们想要的数据, 在网页源代码里面就有
-
动态网页: 专门数据保存API接口 XHR
目的: 获取详情页面数据内容
获取详情页url地址
请求列表页面url地址
二. 代码实现步骤
-
发送请求, 请求列表页面url地址
-
获取数据, 获取网页源代码
-
解析数据, 提取 详情页面url地址
-
发送请求, 请求 详情页面url地址
-
获取数据, 获取网页源代码 <详情页面数据>
-
解析数据, 提取 价格 户型 面积 …房源信息
-
保存数据, 把房源数据保存表格文件
代码展示
# 导入数据请求模块 --> 第三方模块, 需要安装 pip install requests
import requests
# 导入数据解析模块 --> 第三方模块, 需要安装 pip install parsel
import parsel
# 导入正则
import re
# 导入csv模块
import csv
f = open('二手房.csv', mode='w', encoding='utf=8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'售价',
'单价',
'户型',
'楼层高度',
'楼层数',
'朝向',
'样式',
'装修',
'面积',
'时间',
'建造',
'小区',
'区域',
'商圈',
'详情页',
])
csv_writer.writeheader()
"""
完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777”
1. 发送请求, 请求列表页面url地址
"""
# 请求链接 列表页面url
url = 'https://cs.lianjia.com/ershoufang/'
# 发送请求 <Response [200]> 表示请求成功
response = requests.get(url)
"""
2. 获取数据, 获取网页源代码
response.text 获取网页源代码
3. 解析数据, 提取 详情页面url地址
xpath
css选择器: 根据标签属性提取数据内容
re
"""
list_html_data = response.text
# 把获取html字符串数据, 转成可解析的对象
selector = parsel.Selector(list_html_data)
# 提取链接url地址
href = selector.css('.sellListContent li .info .title a::attr(href)').getall()
# for循环遍历
for link in href:
"""
4. 发送请求, 请求 详情页面url地址
5. 获取数据, 获取网页源代码 <详情页面数据>
"""
link_data = requests.get(link).text
"""
6. 解析数据, 提取 价格 户型 面积 ....房源信息
"""
link_selector = parsel.Selector(link_data)
try:
title = link_selector.css('.main::text').get() # 标题
price = link_selector.css('.price .total::text').get() # 售价
price_1 = link_selector.css('.unitPriceValue::text').get() # 单价
room_type = link_selector.css('.room .mainInfo::text').get() # 户型
fool_info = link_selector.css('.room .subInfo::text').get() # 楼层
fool_list = fool_info.split('/') # 字符串分割, 把字符串分割成列表
fool_1 = fool_list[0] # 高度
完整源码、解答、教程皆+VX:pytho8987获取,验证备注“777”
# fool_2 = fool_list[1].replace('共', '').replace('层', '') # 总计有多少层
fool_num = re.findall('共(\d+)层', fool_list[1])[0] # 层数
room_face = link_selector.css('.type .mainInfo::text').get() # 朝向
subInfo = link_selector.css('.type .subInfo::text').get()
style = subInfo.split('/')[0] # 样式
fitment = subInfo.split('/')[1] # 装修
area = link_selector.css('.area .mainInfo::text').get() # 面积
date_info = link_selector.css('.area .subInfo::text').get() # 时间
date = date_info.split('/')[0] # 时间
building = date_info.split('/')[1] # 建筑类型
communityName = link_selector.css('.communityName .info::text').get() # 小区
areaName_info = link_selector.css('.areaName .info a::text').getall() # 区域
areaName = areaName_info[0] # 区域
areaName_1 = areaName_info[1] # 区域
dit = {
'标题': title,
'售价': price,
'单价': price_1,
'户型': room_type,
'楼层高度': fool_1,
'楼层数': fool_num,
'朝向': room_face,
'样式': style,
'装修': fitment,
'面积': area,
'时间': date,
'建造': building,
'小区': communityName,
'区域': areaName,
'商圈': areaName_1,
'详情页': link,
}
csv_writer.writerow(dit)
print(dit)
# print(title, price, price_1, room_type, fool_1, fool_num, room_face, style, fitment, area, date, building, communityName, areaName, areaName_1)
except:
pass
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。