当前位置: 代码网 > it编程>前端脚本>Python > 【python】爬取链家二手房数据做数据分析【附源码】

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

2024年08月01日 Python 我要评论
爬取链家二手房数据做数据分析

欢迎来到英杰社区icon-default.png?t=n7t8https://bbs.csdn.net/topics/617804998

一、前言、

        在数据分析和挖掘领域中,网络爬虫是一种常见的工具,用于从网页上收集数据。本文将介绍如何使用 python 编写简单的网络爬虫程序,从链家网上海二手房页面获取房屋信息,并将数据保存到 excel 文件中。

二、效果图:

53c87a20bb734732ac484ee224692d51.png

  • 导入需要的库:

import requests
 
from bs4 import beautifulsoup
 
import pandas as pd

     如果出现模块报错

c124a1693bfc457ba1f2909ee9d299fc.png

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://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) 函数:

# 收集单页数据 xpanx.com
 
def fetch_data(page_number):
    url = f"https://sh.lianjia.com/ershoufang/pg{page_number}/"
 
    response = requests.get(url)
 
    if response.status_code != 200:
        print("请求失败")
 
        return []
 
    soup = beautifulsoup(response.text, 'html.parser')
 
    rows = []
 
    for house_info in soup.find_all("li", {"class": "clear logviewdata logclickdata"}):
        row = {}
 
        # 使用您提供的类名来获取数据 xpanx.com
 
        row['区域'] = house_info.find("div", {"class": "positioninfo"}).get_text() if house_info.find("div", {
            "class": "positioninfo"}) else none
 
        row['房型'] = house_info.find("div", {"class": "houseinfo"}).get_text() if house_info.find("div", {
            "class": "houseinfo"}) else none
 
        row['关注'] = house_info.find("div", {"class": "followinfo"}).get_text() if house_info.find("div", {
            "class": "followinfo"}) else none
 
        row['单价'] = house_info.find("div", {"class": "unitprice"}).get_text() if house_info.find("div", {
            "class": "unitprice"}) else none
 
        row['总价'] = house_info.find("div", {"class": "priceinfo"}).get_text() if house_info.find("div", {
            "class": "priceinfo"}) else none
 
        rows.append(row)
 
    return rows
 
 
# 主函数
 
def main():
    all_data = []
 
    for i in range(1, 11):  # 爬取前10页数据作为示例
 
        print(f"正在爬取第{i}页...")
 
        all_data += fetch_data(i)
 
    # 保存数据到excel xpanx.com
 
    df = pd.dataframe(all_data)
 
    df.to_excel('lianjia_data.xlsx', index=false)
 
    print("数据已保存到 'lianjia_data.xlsx'")
  • 定义 main() 函数:

       

五、完整代码

 这段代码的主要流程是通过循环遍历页面页数,调用 fetch_data(page_number) 函数爬取每一页的数据,并将数据保存到 excel 文件中。整体上,这个程序完成了以下几个主要功能:

import requests

from bs4 import beautifulsoup

import pandas as pd


# 收集单页数据 xpanx.com

def fetch_data(page_number):
    url = f"https://sh.lianjia.com/ershoufang/pg{page_number}/"

    response = requests.get(url)

    if response.status_code != 200:
        print("请求失败")

        return []

    soup = beautifulsoup(response.text, 'html.parser')

    rows = []

    for house_info in soup.find_all("li", {"class": "clear logviewdata logclickdata"}):
        row = {}

        # 使用您提供的类名来获取数据 xpanx.com

        row['区域'] = house_info.find("div", {"class": "positioninfo"}).get_text() if house_info.find("div", {
            "class": "positioninfo"}) else none

        row['房型'] = house_info.find("div", {"class": "houseinfo"}).get_text() if house_info.find("div", {
            "class": "houseinfo"}) else none

        row['关注'] = house_info.find("div", {"class": "followinfo"}).get_text() if house_info.find("div", {
            "class": "followinfo"}) else none

        row['单价'] = house_info.find("div", {"class": "unitprice"}).get_text() if house_info.find("div", {
            "class": "unitprice"}) else none

        row['总价'] = house_info.find("div", {"class": "priceinfo"}).get_text() if house_info.find("div", {
            "class": "priceinfo"}) else none

        rows.append(row)

    return rows


# 主函数

def main():
    all_data = []

    for i in range(1, 11):  # 爬取前10页数据作为示例

        print(f"正在爬取第{i}页...")

        all_data += fetch_data(i)

    # 保存数据到excel xpanx.com

    df = pd.dataframe(all_data)

    df.to_excel('lianjia_data.xlsx', index=false)

    print("数据已保存到 'lianjia_data.xlsx'")


if __name__ == "__main__":
    main()

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com