可狱可囚的爬虫系列课程 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}, 请检查')
相关推荐
浦信仿真大讲堂23 分钟前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study1 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1232 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb003 小时前
一个项目带你入门AI应用开发01
python
0566463 小时前
Python康复训练——常用标准库
开发语言·python·学习
hyf3266333 小时前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
昆曲之源_娄江河畔3 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql