找回密码
 会员注册
查看: 37|回复: 0

python爬取链家二手房数据做数据分析附源码

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71766
发表于 2024-9-8 17:46:18 | 显示全部楼层 |阅读模式
欢迎来到英杰社区https://bbs.csdn.net/topics/617804998一、前言、        在数据分析和挖掘领域中,网络爬虫是一种常见的工具,用于从网页上收集数据。本文将介绍如何使用Python编写简单的网络爬虫程序,从链家网上海二手房页面获取房屋信息,并将数据保存到Excel文件中。二、效果图:导入需要的库:requests:用于发送HTTP请求和获取网页内容。BeautifulSoup:用于解析HTML内容,提取所需信息。pandas:用于数据处理和保存数据到Excel文件。importrequestsfrombs4importBeautifulSoupimportpandasaspd    如果出现模块报错       进入控制台输入:建议使用国内镜像源pipinstall模块名称-ihttps://mirrors.aliyun.com/pypi/simple        我大致罗列了以下几种国内镜像源:清华大学https://pypi.tuna.tsinghua.edu.cn/simple阿里云https://mirrors.aliyun.com/pypi/simple/豆瓣https://pypi.douban.com/simple/百度云https://mirror.baidu.com/pypi/simple/中科大https://pypi.mirrors.ustc.edu.cn/simple/华为云https://mirrors.huaweicloud.com/repository/pypi/simple/腾讯云https://mirrors.cloud.tencent.com/pypi/simple/三、代码分析        首先,我们定义了一个函数fetch_data(page_number),用于获取指定页面的房屋信息数据。这个函数会构建对应页数的URL,并发送GET请求获取页面内容。然后,使用BeautifulSoup解析页面内容,并提取每个房屋信息的相关数据,如区域、房型、关注人数、单价和总价。最终将提取的数据以字典形式存储在列表中,并返回该列表。        接下来,我们定义了主函数main(),该函数控制整个爬取和保存数据的流程。在主函数中,我们循环爬取前10页的数据,调用fetch_data(page_number)函数获取每一页的数据,并将数据追加到列表中。然后,将所有爬取的数据存储在DataFrame中,并使用df.to_excel('lianjia_data.xlsx',index=False)将数据保存到Excel文件中。最后,在程序的入口处,通过if__name__=="__main__":来执行主函数main()。四、详解代码定义fetch_data(page_number)函数:这个函数接收一个参数page_number,表示要爬取的页面页数。构建相应页数的URL,并发送GET请求获取页面内容。使用BeautifulSoup解析页面内容,并提取每个房屋信息的相关数据,如区域、房型、关注人数、单价和总价。将提取的数据以字典形式存储在rows列表中,并返回该列表。#收集单页数据xpanx.comdeffetch_data(page_number):url=f"https://sh.lianjia.com/ershoufang/pg{page_number}/"response=requests.get(url)ifresponse.status_code!=200:print("请求失败")return[]soup=BeautifulSoup(response.text,'html.parser')rows=[]forhouse_infoinsoup.find_all("li",{"class":"clearLOGVIEWDATALOGCLICKDATA"}):row={}#使用您提供的类名来获取数据xpanx.comrow['区域']=house_info.find("div",{"class":"positionInfo"}).get_text()ifhouse_info.find("div",{"class":"positionInfo"})elseNonerow['房型']=house_info.find("div",{"class":"houseInfo"}).get_text()ifhouse_info.find("div",{"class":"houseInfo"})elseNonerow['关注']=house_info.find("div",{"class":"followInfo"}).get_text()ifhouse_info.find("div",{"class":"followInfo"})elseNonerow['单价']=house_info.find("div",{"class":"unitPrice"}).get_text()ifhouse_info.find("div",{"class":"unitPrice"})elseNonerow['总价']=house_info.find("div",{"class":"priceInfo"}).get_text()ifhouse_info.find("div",{"class":"priceInfo"})elseNonerows.append(row)returnrows#主函数defmain():all_data=[]foriinrange(1,11):#爬取前10页数据作为示例print(f"正在爬取第{i}页...")all_data+=fetch_data(i)#保存数据到Excelxpanx.comdf=pd.DataFrame(all_data)df.to_excel('lianjia_data.xlsx',index=False)print("数据已保存到'lianjia_data.xlsx'")定义main()函数:在主函数中循环爬取前10页的数据,调用fetch_data(page_number)函数获取每一页的数据,并将数据追加到all_data列表中。将所有爬取的数据存储在DataFrame中。最后使用df.to_excel('lianjia_data.xlsx',index=False)将数据保存到名为lianjia_data.xlsx的Excel文件中。       五、完整代码 这段代码的主要流程是通过循环遍历页面页数,调用fetch_data(page_number)函数爬取每一页的数据,并将数据保存到Excel文件中。整体上,这个程序完成了以下几个主要功能:发送HTTP请求并获取网页内容。使用BeautifulSoup解析HTML内容,提取所需信息。将提取的数据存储在列表中。将列表数据转换为DataFrame。将DataFrame数据保存到Excel文件中。importrequestsfrombs4importBeautifulSoupimportpandasaspd#收集单页数据xpanx.comdeffetch_data(page_number):url=f"https://sh.lianjia.com/ershoufang/pg{page_number}/"response=requests.get(url)ifresponse.status_code!=200:print("请求失败")return[]soup=BeautifulSoup(response.text,'html.parser')rows=[]forhouse_infoinsoup.find_all("li",{"class":"clearLOGVIEWDATALOGCLICKDATA"}):row={}#使用您提供的类名来获取数据xpanx.comrow['区域']=house_info.find("div",{"class":"positionInfo"}).get_text()ifhouse_info.find("div",{"class":"positionInfo"})elseNonerow['房型']=house_info.find("div",{"class":"houseInfo"}).get_text()ifhouse_info.find("div",{"class":"houseInfo"})elseNonerow['关注']=house_info.find("div",{"class":"followInfo"}).get_text()ifhouse_info.find("div",{"class":"followInfo"})elseNonerow['单价']=house_info.find("div",{"class":"unitPrice"}).get_text()ifhouse_info.find("div",{"class":"unitPrice"})elseNonerow['总价']=house_info.find("div",{"class":"priceInfo"}).get_text()ifhouse_info.find("div",{"class":"priceInfo"})elseNonerows.append(row)returnrows#主函数defmain():all_data=[]foriinrange(1,11):#爬取前10页数据作为示例print(f"正在爬取第{i}页...")all_data+=fetch_data(i)#保存数据到Excelxpanx.comdf=pd.DataFrame(all_data)df.to_excel('lianjia_data.xlsx',index=False)print("数据已保存到'lianjia_data.xlsx'")if__name__=="__main__":main()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 13:44 , Processed in 0.660172 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表