首页 > 编程语言 >使用Python抓取房源信息

使用Python抓取房源信息

时间:2024-10-22 23:46:39浏览次数:8  
标签:xpath Python text 抓取 房源 item div proxies data

1. 引言

在当今大数据时代,网络爬虫成为获取信息的重要手段之一。本文将以某家二手房为例,演示如何使用Python爬虫抓取房源信息,并将这些信息保存到Excel文件中。
目标网站
在这里插入图片描述

2. 准备工作

2.1 安装必要的库

在开始之前,请确保你的环境中已经安装了以下Python库:

  • requests:用于发送HTTP请求。
  • lxml:提供了一个强大的XPath选择器,方便解析HTML文档。
  • pandas:用来处理和分析数据。
  • fake_useragent:随机生成User-Agent,以模拟不同的浏览器访问。

可以通过pip命令安装它们:

pip install requests lxml pandas fake_useragent

2.2 代理池准备

为了防止IP被封禁,我们需要准备一个代理池。这里假设你已经有了一个名为proxies.txt的文件,其中每一行都存储了一个可用的代理服务器地址。

3. 代码详解

3.1 导入模块

首先需要导入所需的Python库:

import random
import pandas as pd
from lxml import etree
import requests
from fake_useragent import UserAgent

3.2 设置请求头

接下来设置请求头,特别是User-Agent字段,使用fake_useragent库随机生成:

headers = {
    'User-Agent': UserAgent().random
}

3.3 读取代理列表

在爬虫过程中,使用代理可以有效避免被网站封锁。我们从一个文件中读取代理服务器的列表,并将其存储到proxies列表中:

file_path = "E:/Python/代理池/proxies.txt"

# 从文件中读取代理列表
proxies = []
with open(file_path, 'r') as file:
    for line in file:
        proxy = line.strip()  # 去除每行末尾的换行符
        proxies.append(proxy)

这里需要注意的是,确保proxies.txt文件中的每一行都是有效的代理地址格式(例如:http://ip:port)。

3.4 抓取数据

3.4.1 创建会话对象

为了更好地管理HTTP请求和保持连接状态,我们可以创建一个requests.Session对象:

session = requests.session()
3.4.2 发送POST请求

针对链家二手房的不同页面,通过循环遍历页码来发送请求。每次请求时随机选择一个代理以减少被封禁的风险:

for page in range(1, 6):  # 抓取第1页到第5页
    url = f'https://bj.lianjia.com/ershoufang/pg{page}/'
    
    # 使用随机选择的代理发送POST请求
    response = session.post(url=url, proxies={'http': random.choice(proxies)}, headers=headers, timeout=10)

注意,这里使用了post方法,但通常对于这类网页浏览请求,使用get方法更为合适。这可能是一个示例代码的小错误,正确的做法应该是:

response = session.get(url, proxies={'http': random.choice(proxies)}, headers=headers, timeout=10)
3.4.3 解析HTML内容

一旦成功获取响应,接下来需要解析HTML文档,提取有用的信息。这里采用lxml库提供的XPath功能:

tree = etree.HTML(response.text)
items = tree.xpath('//*[@id="content"]/div[1]/ul/li')

上述代码定位到了包含房源信息的列表项。

3.4.4 提取信息

对每个房源项目进行解析,提取标题、位置信息、房屋详情以及总价等字段:

data = []
for item in items:
    title = item.xpath('./div[1]/div[1]/a/text()')[0]  # 房源标题
    positionInfo = item.xpath('./div[1]/div[2]/div/a[1]/text()')[0] + item.xpath('./div[1]/div[2]/div/a[2]/text()')[0]  # 位置信息
    houseInfo = item.xpath('./div[1]/div[3]/div/text()')[0]  # 房屋信息
    total_price = item.xpath('./div[1]/div[6]/div[1]/span/text()')[0] + item.xpath('./div[1]/div[6]/div[1]/i[2]/text()')[0]  # 总价
    data.append({
        '标题': title,
        '位置信息': positionInfo,
        '房屋信息': houseInfo,
        '总价': total_price
    })

将这些信息添加到当前页面的数据集合data中。

3.5 存储数据

当所有页面都处理完毕后,我们将收集到的所有数据合并成一个大的列表all_data,然后转换为Pandas DataFrame,并最终保存为Excel文件:

# 将当前页面的数据添加到总数据列表
all_data.extend(data)

# 将所有数据转换为 DataFrame
df = pd.DataFrame(all_data)

# 将 DataFrame 写入 Excel 文件
df.to_excel('链家二手房.xlsx', index=False)
print("数据已成功保存到 Excel 文件中")

4. 运行结果

控制台输出
在这里插入图片描述

保存文档
在这里插入图片描述

5. 结论

本文介绍了如何利用Python编写简单的网络爬虫程序来抓取链家网上的二手房信息,并且展示了如何使用Pandas库将这些信息保存为Excel文件。
确保遵守目标网站的服务条款,在合法合规的前提下使用爬虫技术。

标签:xpath,Python,text,抓取,房源,item,div,proxies,data
From: https://blog.csdn.net/2301_78198846/article/details/143171564

相关文章

  • Python与excel交互(xlwt库和openpyxl库的使用)
    xlw库介绍xlwt是用于在Python中操作Excel文件的第三方库,主要用于创建和写入Excel文件(xls格式)。使用xlwt可以方便地设置单元格的样式,像设置字体(如字体大小、颜色等)、对齐方式(水平和垂直对齐)和边框等。还能灵活控制工作表的行高和列宽,以满足不同数据展示的需求。在数据写入......
  • 使用OpenCV进行视频边缘检测:案例Python版江南style
    1.引言本文将演示如何使用OpenCV库对视频中的每一帧进行边缘检测,并将结果保存为新的视频文件。边缘检测是一种图像处理技术,它可以帮助我们识别出图像中不同区域之间的边界。在计算机视觉领域,这项技术有着广泛的应用,比如物体识别、运动分析等。2.环境准备为了运行本示例......
  • Gradio(二):利用纯python代码创建Web应用最简单的包
    接上文“Gradio:利用纯python代码创建Web应用最简单的包”本文进一步介绍Gradio包的使用。1、多个输入与多个输出当需要多个输入和多个输出时importgradioasgrdefgreet(name,is_morning,temperature):salutation="Goodmorning"ifis_morningelse"Goodeve......
  • 基于大数据 Python+Vue 电影票房爬取可视化系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:jf1d!!!!!!!!!项目介绍在快速发展的社会中,娱乐领域也在不断进步。为了提高数据分析的效率和观众的观影体验,越来越多的影视公司和电影院选择利用互联网......
  • 100+SCI科研绘图系列教程(R和python)
    科研绘图系列:箱线图加百分比点图展示组间差异-CSDN博客科研绘图系列:箱线图加蜜蜂图展示组间数据分布-CSDN博客科研绘图系列:小提琴图和双侧小提琴图展示组间差异-CSDN博客科研绘图系列:组间差异的STAMP图的ggplot2实现-CSDN博客科研绘图系列:组间差异误差棒展示-CSDN博客科研绘......
  • 基于PyQt Python的深度学习图像处理界面开发(二)
         Python标准库更多的适合处理后台任务,唯一的图形库tkinter使用起来很不方便,所以后来出现了针对Python图形界面开发的扩展库,例如PyQt。    在介绍PyQt之前,必须先简单介绍一下Qt。Qt是一个C++可视化开发平台,是一个跨平台的C++图形用户界面应用程序框架(C++......
  • python捕获鼠标键盘
    https://item.taobao.com/item.htm?from=cart&id=771194972569&pisk=f8nsFbjz51fs1GLwPtpUPW36bmrjcjtyctwxExINHlETGoMjerI2SlzbcXFEb5kaXSZjhYUxgSkNI2creGowSoSbjoqvaQ-y4ODgmoFaQ0_Nske7enSAX-KXde_DaQ-ycFBLcCOr_GiSnMe7eoeTk5Cpd-yVDshADkpQH-5OkGhvdvF3h1QAXrI......
  • 【Python-AI篇】数据结构和算法
    1.算法概念1.1什么是数据结构存储,组织数据的方式1.2什么是算法实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c)1.2.1算法的五大特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法......
  • Python——脚本实现datax全量同步mysql到hive
    文章目录前言一、展示脚本二、使用准备1、安装python环境2、安装EPEL3、安装脚本执行需要的第三方模块三、脚本使用方法1、配置脚本2、创建.py文件3、执行脚本4、测试生成json文件是否可用前言在我们构建离线数仓时或者迁移数据时,通常选用sqoop和datax等工具进行......
  • Python停车场车位识别
    程序示例精选Python停车场车位识别如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对《Python停车场车位识别》编写代码,代码整洁,规则,易读。学习与应用推荐首选。文章目录一、所需工具软件二、使用步骤       1.......