爬取二手房案例--parsel教学篇(CSS选择器)

news/2025/3/14 9:19:37/文章来源:https://www.cnblogs.com/laity17/p/18677081

@

目录
  • 前言
  • 导航
    • parsel的使用
      • 安装parsel
      • 创建Selector对象
      • 解析数据
        • CSS选择器
        • Xpath
        • 正则表达式
  • 爬取安居客二手房实例
      • 运行截图
  • 共勉
  • 博客

前言

本文通过一个爬取二手房的案例,来分享另外一种解析数据的方式:解析神器python第三方库parsel库。之所以叫他解析神奇,是因为它支持三种解析方式。
可以通过Xpath,CSS选择器和正则表达式来提取HTML或XML文档中的数据。

导航

  • 爬取小说案例-BeautifulSoup教学篇
  • 爬取二手房案例--parsel教学篇(CSS选择器)
  • 爬取美国公司案例-parsel库教学篇(Xpath的详细使用)
  • 爬取东方财富网-parsel教学篇(正则表达式的详细使用+实例)
  • 爬取QQ音乐的评论-JSON库的详细使用

parsel的使用

安装parsel

因为它是第三方库,所以需要在终端使用pip install parsel 来安装

pip install parsel

创建Selector对象

url="xxx.com"
resp=requests.get(url)
selector=parsel.Selector(resp.text)

解析数据

解析数据有CSS选择器,Xpath和正则表达式,下面通过一个例子来分别介绍这三种解析方式

<html>
<head><title>Example</title>
</head>
<body><div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span id="bold">third item</span><span id="test">test</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
</html>

CSS选择器

# get()和get_all()区别
## get():用于从通过选择器定位到的元素中提取第一个匹配项的文本内容或属性值,返回的是字符串。
## get_all():用于通过选择器定位到的元素中提取所有匹配项的文本内容或属性值,返回的是列表# 标签选择器
res = selector.css(tagName) 
# 例如:提取所有li标签中的文字
li_data = selector.css("li::text").getall()# class选择器
res = selector.css(tagName.className)
# 例如 提取class为item-1的li标签的内容
li_data = selector.css("li.item-1::text").get()# id选择器
res = selector.css(tagName#idName)
# 例如:提取id为container的div标签的内容
li_data = selector.css("div#container::text").get()# 属性提取器
res = selector.css(tagName::attr(attrName))
# 例如:提取class为item-1的li标签中的href属性
res = selector.css("li.item-1::attr(href)").get()# 后代选择器(如div p)
# 例如:选择id为container的div标签下的所有span标签的内容
res = selector.css("div#container span::text").get()# 子选择器(如div > p)
# 例如:选择id为container的div标签下的所有span标签的内容(和上面不同的是这个标签必须在div的直接子代)
res = selector.css("div#container>span::text").get()# 嵌套选择器
# 例如:提取 class为item-0 li标签内的id为bold的span标签的内容
res = selector.css("li.item-0 span#bold::text").get()# 伪类选择器
# 例如:选择父级元素ul下的第二个li标签直接子代的内容
res = selector.css('ul>li:nth-child(2)::text').get()

Xpath

敬请下篇

正则表达式

敬请下篇

下面通过一个爬取二手房安居客的实例来更深入的了解css选择器的用法吧

爬取安居客二手房实例

import requests # 数据请求模块
import parsel # 数据解析库
import csv  # 存储到表格中
import os  # 文件管理模块with open("house.csv", 'wb') as f:f = open('house.csv', mode='a', encoding='utf-8', newline='')csv_writer = csv.DictWriter(f, fieldnames=["小区名", "小区区域", "小区户型", "小区面积", "均价"])
csv_writer.writeheader()# 目标网站:安居客二手房网站
url="https://wuhan.anjuke.com/sale/hongshana/"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0","Cookie":"xxx"
}
# Cookie可以通过F12键 查看网络数据包,请求标头中。 如下面
response = requests.get(url=url, headers=headers)
# 实例化对象
selector = parsel.Selector(response.text)
# 爬取十页
for  num in range(1,11):url=f'https://wuhan.anjuke.com/sale/hongshana/p2/https://wuhan.anjuke.com/sale/hongshana/p{num}/'print(f"正在抓取:第{num}页")# class选择器res_all=selector.css('div .property')for res in res_all:community=res.css('p.property-content-info-comm-name::text').get()community_address=res.css("p.property-content-info-comm-address span::text").getall()community_address="".join(community_address)community_house=res.css('div.property-content-info p.property-content-info-text  span::text').getall()community_house="".join(community_house)community_area = res.css('div.property-content-info p:nth-child(2)::text').get().strip()community_area = "".join(community_area)community_average=res.css('p.property-price-average::text').get().strip()print("小区名:",community,"小区区域:",community_address,"小区户型:",community_house,"小区面积:",community_area,"均价",community_average)dic = {'小区名': community,'小区区域': community_address,'小区户型':community_house,'小区面积': community_area,'均价': community_average}# 写入表格csv_writer.writerow(dic)

这里找Cookie
image

运行截图

image

image

共勉

财富是对认知的补偿,不是对勤奋的奖赏。

博客

  • 本人是一个渗透爱好者,不时会在微信公众号(laity的渗透测试之路)更新一些实战渗透的实战案例,感兴趣的同学可以关注一下,大家一起进步。
  • 之前在公众号发布了一个kali破解WiFi的文章,感兴趣的同学可以去看一下,在b站(up主:laity1717)也发布了相应的教学视频。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/870797.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

duckX 读写word,替换word中内容的整理

一、库编译 1.下载地址:https://github.com/amiremohamadi/DuckX 2. 使用git 下载: git clone https://github.com/amiremohamadi/DuckX 3.编译 1.打开代码所在目录 2.创建生成目录build 3.依次点击 config generate 4. 打开项目,选择编译库的种类 生成库位置二、使用 C++读…

OpenAI 宕机思考丨Kubernetes 复杂度带来的服务发现系统的风险和应对措施

本文以社区主流服务发现系统 Nacos 为例,从可靠性、可伸缩性、高性能、可维护性等 4 个方面探讨如何提升 Kubernetes 中微服务应用的稳定性。作者:王建伟(正己) 12 月 11 日,OpenAI 旗下 AI 聊天机器人平台 ChatGPT、视频生成工具 Sora 及其面向开发人员的 API 自太平洋时…

如何删除www目录下无法删除的文件?

您好,有时在尝试删除www目录下的文件时,可能会遇到权限不足或其他问题导致无法删除。以下是详细的排查步骤和解决方案,帮助您顺利删除这些文件:检查文件权限:确认要删除的文件和目录具有适当的权限。可以通过FTP客户端或SSH连接到服务器并检查文件夹权限。例如:bashls -l…

请问忘记FTP账号密码,如何重置?

如果您忘记了FTP账号密码,可以通过以下几种方式重置密码,确保您的FTP账户能够正常使用:通过控制面板重置:大多数云服务提供商和托管平台都提供了在线控制面板,您可以在其中找到FTP管理选项。登录控制面板后,选择“FTP管理”或类似选项,然后点击“重置密码”。按照提示完…

如何解决FTP上传文件失败的问题?

您好,FTP(文件传输协议)是用于在互联网上进行文件传输的常用工具。如果遇到FTP上传文件失败的情况,可能是由多种原因引起的。以下是详细的排查步骤和解决方案:检查FTP账户信息:确认您使用的FTP账户名和密码是否正确。如果不确定,可以尝试使用其他已知有效的账户进行测试…

如何开通25端口发送邮件

开通25端口通常是为了发送邮件。以下是详细的步骤和注意事项:检查防火墙设置:登录到您的服务器,确保防火墙已放行25端口。 使用命令行工具(如iptables或firewalld)查看防火墙规则。 示例命令:sudo iptables -L sudo firewall-cmd --list-all配置邮件服务:安装并配置邮件…

请问所有网站不能打开,云服务器问题如何排查?

当所有网站无法打开时,可能是由于云服务器配置错误或网络问题引起的。以下是详细的排查和解决方案:检查服务器状态:确认云服务器是否正常运行,可以通过云平台的管理界面查看服务器状态。 如果服务器处于关机或重启状态,尝试手动启动服务器,并等待其完全启动后再进行测试。…

多站点绑定同一域名的不同端口

要实现用户直接通过域名访问不同端口上的多个网站,可以通过以下几种方式来解决:使用反向代理: 反向代理是一种常见的解决方案,它允许您将不同的子域名或路径映射到不同的后端服务器或端口。具体步骤如下:安装Nginx或Apache:确保您的服务器上已经安装了Nginx或Apache作为反…

网站流量异常,如何排查和解决?

当您发现网站流量异常增加时,这可能是由多种原因引起的,包括恶意攻击、爬虫抓取、推广活动等。为了帮助您更好地理解和解决这个问题,以下是几个可能的原因及相应的解决方案:检查日志文件日志文件是排查流量异常的重要工具。大多数Web服务器(如Nginx、Apache)都会记录详细…

如何安全地修改织梦网站登录密码?

修改织梦CMS(DedeCMS)网站的登录密码是一个重要的安全操作,可以确保网站的安全性和稳定性。以下是详细步骤:登录后台: 使用管理员账号登录织梦CMS后台。进入用户管理: 在左侧菜单中找到“用户管理”或“管理员管理”选项,点击进入。选择管理员用户: 在用户管理页面中,…

如何轻松修改网站的公司信息?

修改网站上的公司信息是一个重要的维护任务,可以确保信息的准确性和时效性。以下是详细步骤:登录后台: 使用管理员账号登录网站的后台管理系统。进入内容管理: 在后台管理系统中,找到“内容管理”或“文章管理”选项,点击进入。选择公司信息页面: 在内容管理页面中,找到…

如何顺利升级虚拟主机和数据库空间以满足业务需求

随着业务的增长,现有的虚拟主机和数据库空间可能无法满足需求。此时,升级空间成为必要。以下是详细的升级步骤和注意事项,确保升级过程顺利进行:问题 可能的原因 解决方案虚拟主机空间不足 文件过多或大文件占用 升级到更高配置的虚拟主机,增加磁盘空间。数据库空间不足 数…