【爬虫】链家二手房数据采集

【爬虫】链家二手房数据采集

本文旨在利用Python中的parsel库爬取链家郑州二手房数据,方便后续关注、分析。

相关库简介

parsel 是一个用于处理 HTML 和 XML 文档的 Python 库,特别适合从网页中提取数据。它提供了类似于 lxml 或 BeautifulSoup 的功能,但它的 API 设计与 Scrapy 框架高度一致,因此在使用 Scrapy 时,parsel 是非常方便的选择。

parsel 的主要功能

HTML/XML 解析parsel 可以解析 HTML 和 XML 文档,支持用 CSS 选择器或 XPath 提取元素。

轻量级和高效:相比于一些其他的解析库,parsel 非常轻量级,同时能够高效地处理大规模的网页内容。

代码实现

导入相关库

# -*- coding: UTF-8 -*-
# 导入相关库
import requests
import parsel
import pandas as pd
from parsel import Selector
import time

观察下网页的结构,发现通过调整page的参数从而实现翻页,那么后面的操作就比较简单了。
【爬虫】链家二手房数据采集_第1张图片

提取链家二手房数据信息

定义lianjia_data 函数,用于从网页内容中提取特定信息。

# 获取链家二手房数据
def lianjia_data(base_url, page_range):
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
    }
    all_data = []

    for page in page_range:
        url = f'{base_url}pg{page}'
        print(f'Fetching data from: {url}')
        res_text = requests.get(url=url, headers=header).text
        time.sleep(2)  # 避免爬取过快被封

        selector = Selector(res_text)
        infos = selector.css('.sellListContent li .info')
        
        for info in infos:
            title = info.css('.title a::text').get()
            house_info = info.css('.address .houseInfo::text').get()
            house_location = info.css('.flood .positionInfo a::text').get()
            house_unitPrice = (str(info.css('div.unitPrice span::text').get()).split('元/平')[0]).replace(',', '')
            price = info.css('div.totalPrice span::text').get().replace('万', '')
            follow_info = info.css('.followInfo::text').get()
            followers_count = follow_info.split('/')[0].strip() if follow_info else '未知'
            community_name = info.css('.positionInfo a:first-of-type::text').get()
            town_name = info.css('.positionInfo a:last-of-type::text').get()

            all_data.append({
                '标题': title,
                '镇/街道': town_name,
                '小区': community_name,
                '位置': house_location,
                '单价(元/平米)': int(house_unitPrice),
                '总价(万)': float(price),
                '房屋信息': house_info,
                '网址': url,
                '关注数': followers_count,
            })
        
        print(f'Page {page} processed.')

    df = pd.DataFrame(all_data)
    return df

将提取的信息保存为CSV文件

# 保存到CSV函数
def save_to_csv(dataframe, filename):
    dataframe.to_csv(filename, encoding='utf-8-sig', index=False)
    print(f'Successfully saved data to {filename}')

结果展示

如下,链家郑州二手房的相关信息都提取保存为csv文件了。大家可以通过修改url和调整page,获取其他城市的二手房数据。

【爬虫】链家二手房数据采集_第2张图片

推荐阅读
  • 【可视化】用pyecharts绘制我国人口分布
  • 【可视化】软科2024中国大学可视化分析
  • 使用Schedule定时采集知乎热榜数据

欢迎关注我的公众号“AI拾贝”,原创技术文章第一时间推送。后台发送”排行榜“,自动回复源码和数据。

你可能感兴趣的:(网络爬虫,爬虫,python,scipy,pandas)