当前位置: 首页 > news >正文

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

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

一、网页信息的获取

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

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)当前页面所有在售新房获取

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

(2)部分房屋信息抓取

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))

三、完整代码

爬虫代码的编写,除了要有扎实的基础知识外,还要善于分析网页内容。
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}, 请检查')

相关文章:

  • STC51中INTCLKO 寄存器各个位的作用
  • 解决Jenkins默认终止Shell产生服务进程的问题
  • 数据结构——多项式问题(顺序存储结构or链式存储结构)
  • 【Python修仙编程】(二) Python3灵源初探(8)
  • 8.大模型微调学习案例:基于 Hugging Face、8位量化与 LoRA 适配器的方案
  • doris: SQL Server
  • vue3中ref和reactive的区别
  • C 语 言 --- 数 组 (1)
  • Orale数据文件加错位置,你直接rm引发的故障
  • java后端开发day28--常用API(三)时间类包装类
  • npm install -g @vue/cli 方式已经无法创建VUE3项目
  • 论文阅读_LMLPA_用大语言模型实现人格评测
  • 我的世界forge模组开发(9)——自定义投掷物实体
  • c#事件案例与分析
  • 解决电脑问题(10)——桌面问题
  • js逆向-某网站cookies生成逻辑分析_2025-03-08
  • element-plus中table组件的使用
  • 【2025软考高级架构师】——软件工程(2)
  • Java的数据类型
  • 小程序 wxml 语法 —— 41列表渲染 - 进阶用法
  • 广告公司怎么做业务/键词优化排名
  • 公司是否可以做多个网站/搜索优化是什么意思
  • 做热点链接的网站/网站建设与网页设计制作
  • 河南网站托管优化/合肥搜索引擎推广
  • 企业网站做电脑营销/吸引人的软文标题
  • 沈阳中联做网站/曼联目前积分榜