可狱可囚的爬虫系列课程 18:成都在售新房数据爬虫(lxml 模块)实战

上一篇文章中带大家学习了 lxml 模块以及 XPath 语法,本文针对某网新房数据编写爬虫进行实战。

一、网页信息的获取

抓取地址:https://cd.fang.lianjia.com/loupan/

python 复制代码
import requests

Link = 'https://cd.fang.lianjia.com/loupan/'
Headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}
response = requests.get(url=Link, headers=Headers)
if response.status_code == 200:
    html_source = response.text
    print(html_source)
else:
    print(f'状态码:{response.status_code}, 请检查')

二、新房数据的抓取

(1)当前页面所有在售新房获取

python 复制代码
root = etree.HTML(html_source)
# 找到所有房屋信息对应的 li 标签,构建 li 列表
li_list = root.xpath('/html/body/div[3]/ul[@class="resblock-list-wrapper"]/li')

(2)部分房屋信息抓取

python 复制代码
for li in li_list:
    # 经过分析,房屋名称信息较好获取,而要获得房屋面积单价则需要借助分支语法
    house_name = li.xpath('./div/div[1]/h2/a/text()')  # 房屋名称
    house_unit_price = li.xpath('./div/div[6]/div[1]/span[1]/text()|./div/div[6]/div[1]/span[2]/text()')  # 房屋面积单价
    print(house_name[0], ''.join(house_unit_price))

三、完整代码

爬虫代码的编写,除了要有扎实的基础知识外,还要善于分析网页内容。

python 复制代码
import requests
from lxml import etree

Link = 'https://cd.fang.lianjia.com/loupan/'
Headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
}
response = requests.get(url=Link, headers=Headers)
if response.status_code == 200:
    html_source = response.text
    root = etree.HTML(html_source)
    # 找到所有房屋信息对应的 li 标签,构建 li 列表
    li_list = root.xpath('/html/body/div[3]/ul[@class="resblock-list-wrapper"]/li')
    for li in li_list:
        # 经过分析,房屋名称信息较好获取,而要获得房屋面积单价则需要借助分支语法
        house_name = li.xpath('./div/div[1]/h2/a/text()')  # 房屋名称
        house_unit_price = li.xpath('./div/div[6]/div[1]/span[1]/text()|./div/div[6]/div[1]/span[2]/text()')  # 房屋面积单价
        house_price = li.xpath('./div/div[6]/div[@class="second"]/text()')  # 价格区间
        house_address = li.xpath(
            './div/div[2]/span[1]/text()|./div/div[2]/span[2]/text()|./div/div[2]/a/text()')  # 地理位置
        print(house_name[0], ''.join(house_unit_price), house_price[0], '/'.join(house_address))
else:
    print(f'状态码:{response.status_code}, 请检查')
相关推荐
数据科学作家2 小时前
学数据分析必囤!数据分析必看!清华社9本书覆盖Stata/SPSS/Python全阶段学习路径
人工智能·python·机器学习·数据分析·统计·stata·spss
HXQ_晴天4 小时前
CASToR 生成的文件进行转换
python
java1234_小锋5 小时前
Scikit-learn Python机器学习 - 特征预处理 - 标准化 (Standardization):StandardScaler
python·机器学习·scikit-learn
Python×CATIA工业智造5 小时前
Python带状态生成器完全指南:从基础到高并发系统设计
python·pycharm
向qian看_-_5 小时前
Linux 使用pip报错(error: externally-managed-environment )解决方案
linux·python·pip
Nicole-----5 小时前
Python - Union联合类型注解
开发语言·python
Eric.5658 小时前
python advance -----object-oriented
python
云天徽上9 小时前
【数据可视化-107】2025年1-7月全国出口总额Top 10省市数据分析:用Python和Pyecharts打造炫酷可视化大屏
开发语言·python·信息可视化·数据挖掘·数据分析·pyecharts
THMAIL9 小时前
机器学习从入门到精通 - 数据预处理实战秘籍:清洗、转换与特征工程入门
人工智能·python·算法·机器学习·数据挖掘·逻辑回归
@HNUSTer9 小时前
Python数据可视化科技图表绘制系列教程(六)
python·数据可视化·科技论文·专业制图·科研图表