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

news2024/11/17 17:40:44

一、前言、

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

二、效果图:

  • 导入需要的库:

    • requests:用于发送 HTTP 请求和获取网页内容。
    • BeautifulSoup:用于解析 HTML 内容,提取所需信息。
    • pandas:用于数据处理和保存数据到 Excel 文件。
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) 函数:

    • 这个函数接收一个参数 page_number,表示要爬取的页面页数。
    • 构建相应页数的 URL,并发送 GET 请求获取页面内容。
    • 使用 BeautifulSoup 解析页面内容,并提取每个房屋信息的相关数据,如区域、房型、关注人数、单价和总价。
    • 将提取的数据以字典形式存储在 rows 列表中,并返回该列表。
# 收集单页数据 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() 函数:

    • 在主函数中循环爬取前 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 文件中。整体上,这个程序完成了以下几个主要功能:

  1. 发送 HTTP 请求并获取网页内容。
  2. 使用 BeautifulSoup 解析 HTML 内容,提取所需信息。
  3. 将提取的数据存储在列表中。
  4. 将列表数据转换为 DataFrame。
  5. 将 DataFrame 数据保存到 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue的在线考试系统(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能页面 三、论文 前言 现在我国关于在线考试系统的发展以及专注于对无纸化考试的完善程度普遍不高,关于对考试的模式还大部分还停留在纸介质使用的基础上,这种教学模式已不能解决现在的时代所产生的考试…

GitLab--Merge Request 权限管理

场景 团队在日常开发工作中需要进行分支管理,通常使用feature分支进行开发,然后依次合并到dev分支、release分支,整个代码合并过程不仅仅是代码合并还需要对代码进行审核,如果在线下进行审核合并,这样操作无法保留痕迹…

博客笔记项目的自动化测试

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:测试开发项目 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!! 文章目录 …

idea中springboot项目创建后追加依赖

springboot项目创建后追加依赖 前言1、安装插件editstarters设置->插件 2、进入pom.xml 页面 前言 在项目创建的时候选择好依赖创建项目,之后追加依赖不是很方便,介绍一个简单的使用方法,通过editstarters进行添加 1、安装插件editstart…

Http协议综述

目录 一.B/S架构 二.Http协议 1.概述 2.特点 3.请求数据格式 (1)请求头 (2)请求行 (3)请求体 4.相应数据格式 (1)相应行 (2)相应头 (…

鸡尾酒疗法 T1067

鸡尾酒疗法,原指 “高效抗逆转录病毒治疗”(HAARTHAART),由美籍华裔科学家何大一于 1996 年提出,是通过三种或三种以上的抗病毒药物联合使用来治疗艾滋病。该疗法的应用可以减少单一用药产生的抗药性,最大限…

假如有n个台阶,一次只能上1个台阶或2个台阶,请问走到第n个台阶有几种走法?

说明如下:假如有 3个台阶&#xff0c;那么总计就有3种走法:第一种为每次上1个台阶&#xff0c;上3次;第二种为先上2个台阶&#xff0c;再上1个台阶;第三种为先上1个台阶&#xff0c;再上2个台阶。 解决方法&#xff1a;递归 代码展示&#xff1a; #include <stdio.h> …

chromedriver,Chrome驱动的实时更新

发现自己的selenium项目跑不起来了 效验驱动版本 下载链接(可能需要魔法) https://registry.npmmirror.com/binary.html?pathchromedriver/ https://googlechromelabs.github.io/chrome-for-testing/ 找到驱动位置 1. 默认安装路径&#xff1a;Chrome驱动通常会默认安装在系…

要求将两个链表合并成一个有序(从小到大)链表

给定两个元素有序&#xff08;从小到大&#xff09;的链表&#xff0c;要求将两个链表合并成一个有序&#xff08;从小到大&#xff09;链表&#xff0c; 输入描述: 第一行输入第一个链表的结点数S1&#xff0c;S1<100。 第二行输入S1个整数&#xff0c;两两之间用空格隔开…

Android---SmartRefreshLayout实现上拉刷新和下拉加载更多

1. 在 build.gradle 中添加依赖 // 下拉刷新&#xff0c;上拉加载更多 // https://github.com/scwang90/SmartRefreshLayout implementation io.github.scwang90:refresh-layout-kernel:2.1.0 //核心必须依赖 implementation io.github.scwang90:refresh-header-classics…

CleanMyMac X2024一款专为Mac用户设计的优化工具

亲爱的用户们&#xff0c;我们都知道电脑在长时间使用后会变得越来越慢&#xff0c;垃圾文件和无用的应用程序会占用我们的硬盘空间&#xff0c;让我们的电脑变得像蜗牛一样慢。但是&#xff0c;现在有一个解决方案可以让你的电脑重获新生&#xff0c;那就是CleanMyMac X&#…

笔记本hp6930p安装Android-x86补记

在上一篇日记中&#xff08;笔记本hp6930p安装Android-x86避坑日记-CSDN博客&#xff09;提到hp6930p安装Android-x86-9.0&#xff0c;无法正常启动&#xff0c;本文对此再做尝试&#xff0c;原因是&#xff1a;Android-x86-9.0不支持无线网卡&#xff0c;需要在BIOS中关闭WLAN…

哪里下载Mac上最全面的系统清理工具,CleanMyMac X4.15中文版永久版资源啊

哪里下载Mac上最全面的系统清理工具&#xff0c;CleanMyMac X4.15中文版永久版资源啊&#xff0c;CleanMyMac X4.15中文版是一款全面的Mac系统优化工具。它能够扫描、检测并清理不需要的文件和应用程序&#xff0c;优化内存使用和磁盘空间&#xff0c;提高Mac的性能表现。此外&…

寻址错题本

指令寻址 顺序寻址 通过程序计数器PC自动加1,形成下一条指令的指令地址。 跳跃寻址 通过转移类指令实现跳转到指定的代码段或者子程序。 数据寻址 直接寻址 形式地址A就是操作数的地址EA,执行阶段访问一次存储器。 所以当我们需要取得实际的值(操作数)的时候: 第一步:…

【CSP试题回顾】202312-1-仓库规划

CSP-202312-1-仓库规划 解题思路 定义结构体和变量&#xff1a; 结构体 MyWareHouse&#xff0c;用来存储每个仓库的索引&#xff08;编号&#xff09;和位置编码。定义了整数 n 和 m&#xff0c;分别代表仓库的数量和位置编码的维数。定义了一个 vector<MyWareHouse> 的…

springboot心灵治愈交流平台源码和论文

本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述心灵治愈交流平台的当前背景以及系统开发的目的&a…

ssm666社区流浪动物救助领养系统的设计与开发

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1 课题…

Vue开发实例(一)Vue环境搭建第一个项目

Vue环境搭建&第一个项目 一、环境搭建二、安装Vue脚手架三、创建Vue项目 一、环境搭建 下载方式从官网下载&#xff1a;http://nodejs.cn/download/ 建议下载v12.16.0版本以上的&#xff0c;因为版本低无法创建Vue的脚手架 检验是否安装成功 配置环境变量 新增NODE_HOME&…

termux上安装Python

Termux是一款Android平台下的终端模拟器和Linux环境应用&#xff0c;它允许用户在移动设备上访问Linux命令行界面&#xff0c;以便使用命令行工具、脚本、开发环境等功能。 要在Termux上安装Python&#xff0c;请按照以下步骤进行操作&#xff1a; 一&#xff0c;下载termux …

Linux 开发工具vim、gcc/g++、makefile

目录 Linux编辑器-vim 1. 基本概念 2. 基本操作 3. 正常模式命令集 4. 末行模式命令集 5. 其他操作 6. 简单vim配置 Linux编译器-gcc/g 1、基本概念 2、程序翻译的过程 3. gcc如何完成程序翻译 4、动静态库 Linux项目自动化构建工具-make/Makefile 1、背景 2、…