爬取链家二手房数据
爬取链家二手房数据.md
1.介绍项目
2.分析网站结构
3.说明技术选择
4.excel表格构建字段
1. 介绍项目
利用python爬取链家网二手房数据
包含标题信息、地理位置要素、空间布局特征、价格相关指标等基础要素进行综合描述
涵盖项目的基本概况分析以及核心要素提取工作
基于城市名称这一关键属性展开数据抓取操作
针对特定页码范围内的数据获取需求进行自动化处理设计
通过爬虫技术实现目标数据的精确提取过程
可以选择Scrapy或Selenium工具来完成目标数据的抓取工作
至少收集1000条高质量样本数据作为分析基础
单价不低于5万元/平方米的市场定位标准需严格遵守
长沙二手房资源_长沙二手房交易(长沙链家)
2. 分析网站结构
首先进入链家网页,点击二手房,进入二手房页面
网络图片无法正常加载,请检查链接有效性并尝试重新上传
外部链接中的图片无法正常加载(img-q3t9Co3x-1666849945451),建议用户将该文件保存并直接上传至目标平台(C:\Users\16611\AppData\Roaming/MMU)\temp (2))
通过右键菜单选择检查选项,在二手房标签上定位并执行操作以设置该元素的XPATH属性为... 对于其他需要的数据项进行同样的处理步骤
外部图片无法重存可能导致转存失败的情况。可能存在防盗链设置,建议将图片保存后再进行上传操作。
由于外链图片转存失败,请检查网络连接并重新获取图片链接
(C:\Users\16611\Desktop\新建文件夹 (2)]\wpsC821.tmp.jpg)
接下来用xpath提取这一页的数据,并对其规律进行分析进而调整xpath设置;对于其他数据则采用同样的重复操作方式处理
外部链接中的图片存储出现故障,请您尝试将图片保存后直接上传至该平台以确保正常显示
3.说明技术选择
该网页将用selenium抓取所需数据
目标链接:https://cs.lianjia.com/ershoufang/
导入模块和添加无头参数
# 导入所需模块
from selenium import webdriver
import time
# 无界面模式
options = webdriver.ChromeOptions()
# #开启无界面模式,给对象添加无头参数
options.add_argument('--headless') # 添加无头参数
driver = webdriver.Chrome(options=options)
观察翻页url规律并设置指定页码爬取
# 观察翻页之后的url,找出规律
# https://cs.lianjia.com/ershoufang/第一页
# https://cs.lianjia.com/ershoufang/pg2/第二页
# https://cs.lianjia.com/ershoufang/pg3/第三页
# 找出规律:变化参数pgx
# 设置需要爬取的页数
n=eval(input('请输入您要爬取的页数:'))
逐次用selenium进入链接,抓取每页的数据
外部链接中的图片无法正常上传...
# 用selenium进入链接
driver.(f'https://cs.lianjia.com/ershoufang/pg{1}/')#链接
# 用selenium的xpath获取所需数据,并存入空列表
#标题
ele=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[1]/a')
用xpath提取这一页数据,并存入空列表
ele=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[1]/a')
for one in ele:
print(one.text)
listone.append(one.text)
4.excel表格构建字段
将数据存入excel表格中
# # 保存数据
import xlwt
#创建表格
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('yes', cell_overwrite_ok=True)
#写入标签
a = ['标题', '位置', '布局', '总价(万)', '均价']
#遍历写入
for i in range(len(a)):
sheet.write(0, i, a[i]) # 第0行第i列
for j in range(len(listone)):
sheet.write(j + 1, 0, listone[j])
for j in range(len(listtwo)):
sheet.write(j + 1, 1, listtwo[j])
for j in range(len(listthree)):
sheet.write(j + 1, 2, listthree[j])
for j in range(len(listfour)):
sheet.write(j + 1, 3, listfour[j])
for j in range(len(listfive)):
sheet.write(j + 1, 4, listfive[j])
#保存文件
book.save('E:\Pycharm\爬虫班\自己爬取的东西\文件/爬取链家二手房数据.xls')
完整代码:
# 导入所需模块
from selenium import webdriver
import time
# 无界面模式
options = webdriver.ChromeOptions()
# #开启无界面模式,给对象添加无头参数
options.add_argument('--headless') # 添加无头参数
driver = webdriver.Chrome(options=options)
# 设置空列表,用于储存数据
listone=[]
listtwo=[]
listthree=[]
listfour=[]
listfive=[]
# 观察翻页之后的url,找出规律
# https://cs.lianjia.com/ershoufang/第一页
# https://cs.lianjia.com/ershoufang/pg2/第二页
# https://cs.lianjia.com/ershoufang/pg3/第三页
# 找出规律:变化参数pgx
# 设置需要爬取的页数
n=eval(input('请输入您要爬取的页数:'))
for i in range(1,n):
time.sleep(3)#每爬一页停顿3秒,防止抓取速度过快出现反爬
print(f'-----------这是第{i}页--------------')
# 用selenium进入链接
driver.get(f'https://cs.lianjia.com/ershoufang/pg{1}/')#链接
# 用selenium的xpath获取所需数据,并存入空列表
#标题
ele=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[1]/a')
for one in ele:
print(one.text)
listone.append(one.text)
#位置
ele2=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[2]/div')
for two in ele2:
print(two.text)
listtwo.append(two.text)
#布局
ele3=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[3]/div')
for three in ele3:
print(three.text)
listthree.append(three.text)
#总价
ele4=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[6]/div[1]/span')
for four in ele4:
print(four.text+'万')
listfour.append(four.text)
#均价
ele5=driver.find_elements_by_xpath('//*[@id="content"]/div[1]/ul/li[*]/div[1]/div[6]/div[2]/span')
for five in ele5:
print(five.text)
listfive.append(five.text)
print(listone)
print(len(listone))
# # 保存数据
import xlwt
#创建表格
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('yes', cell_overwrite_ok=True)
#写入标签
a = ['标题', '位置', '布局', '总价(万)', '均价']
#遍历写入
for i in range(len(a)):
sheet.write(0, i, a[i]) # 第0行第i列
for j in range(len(listone)):
sheet.write(j + 1, 0, listone[j])
for j in range(len(listtwo)):
sheet.write(j + 1, 1, listtwo[j])
for j in range(len(listthree)):
sheet.write(j + 1, 2, listthree[j])
for j in range(len(listfour)):
sheet.write(j + 1, 3, listfour[j])
for j in range(len(listfive)):
sheet.write(j + 1, 4, listfive[j])
#保存文件
book.save('E:\Pycharm\爬虫班\自己爬取的东西\文件/爬取链家二手房数据.xls')
处理第j个元素
遍历listfour中的每一个元素
将第j个元素写入到第3列
遍历listfive中的每一个元素
将第j个元素写入到第4列
确保所有数据已完整保存至指定位置
book.save(‘E:\Pycharm\爬虫班\自己爬取的东西\文件/爬取链家二手房数据.xls’)
附:直接运行该代码请提前准备好所需模块,以及更改保存的路径。
