Python 爬取链家二手房数据做数据分析

MoMo 2023年8月22日21:59:59
评论
77

这是一个用Python编写的网络爬虫程序,旨在从链家网(Lianjia)的上海二手房页面收集房源信息。该程序使用requests库来发起对链家网的HTTP请求,用BeautifulSoup库来解析返回的HTML页面,最后使用pandas库把收集到的数据保存到Excel文件中。

主要功能

  1. 分页爬取: 程序可以遍历链家网的二手房列表页面,这里以爬取前10页作为示例。
  2. 字段提取: 从每个房源卡片上抓取多个字段,包括区域、房型、朝向、楼层、标签、楼龄、装修、电梯、权属、类型、售价、面积、用途、单价和总价。
  3. 数据保存: 将所有抓取到的信息保存到一个Excel文件中。

使用库

  • requests: 用于网络请求。
  • BeautifulSoup: 用于解析HTML并提取所需数据。
  • pandas: 用于数据处理和保存Excel。

注意事项

  • 需要根据实际的HTML页面结构调整数据提取的代码。
  • 在运行此程序之前,请确保您已经获得了链家网站的许可,且遵守其使用条款。

这个程序主要适用于数据分析、房地产研究或其他需要大量房源信息的场合。它为用户提供了一种自动化、高效地收集链家网上二手房信息的方法。

 

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)

  1. HTTP请求方法: 了解HTTP的GET和POST请求是非常有用的。在这个项目中,主要用到了GET请求来获取网页数据。

HTML和网页结构

  1. HTML基础: 理解HTML的基础结构以及标签、属性、类等是必须的,因为这将帮助你使用BeautifulSoup来定位和提取网页上的特定元素。

Python编程

  1. Python列表和字典: 由于爬取到的数据通常是结构化或半结构化的,因此需要用到Python的列表和字典来存储这些数据。
  2. 字符串操作: 清洗和处理文本数据时,会用到Python的字符串操作方法。
  3. 异常处理: 了解如何使用tryexcept来处理可能出现的错误或异常,如网络请求失败、数据字段缺失等。

数据解析

  1. BeautifulSoup: 这是一个用于解析HTML和XML文档的Python库。了解如何使用它来搜索、遍历和修改网页树是非常有用的。

数据处理和存储

  1. Pandas: 这是一个用于数据分析和操作的Python库。特别是DataFrame对象,它是一个表格型的数据结构,并带有标签。
  2. Excel操作: 了解如何使用pandasto_excel方法将DataFrame保存为Excel文件。

代码组织和项目结构

  1. 模块和函数: 理解如何将代码组织成函数和模块,以提高代码的可读性和可维护性。
  2. 注释和文档: 良好的注释和文档不仅可以帮助其他人理解你的代码,也是代码质量的一个重要标志。
  3. 版本控制: 虽然这不是代码的一部分,但使用像Git这样的版本控制系统是一个好习惯,它可以帮助你跟踪代码的更改。

通过掌握这些知识点,你将更加容易地完成这样的网络爬虫项目。

 

 

 

https://xpanx.com/
MoMo
  • 本文由 发表于 2023年8月22日21:59:59
  • 转载请务必保留本文链接:https://xpanx.com/4173.html
Python动态月度日历Excel生成器 Python

Python动态月度日历Excel生成器

功能 本脚本用于生成一个特定年份的日历,将其保存在Excel工作簿中。用户可以自定义年份以及一周的开始日(如星期一、星期日等)。每个月都会在一个单独的Excel工作表中呈现,且工作表中的周会以绿色背景...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: