python强大的爬虫css+xpath解析器:parsel¶
0 背景¶

在写爬虫的时候, 我们经常需要对网页源码进行解析, 对于html的解析, 我们通常会使用xpath | pyquery | beautifulsoup 等框架去进行解析, 每种框架都有它自己的优势, 因为在不同的网页可以选择不同的解析器.
在面对简单清晰的网页结构时, 我们可以css选择器去完成我们的数据解析, 而在面对复杂的网页结构时, 我们可以选择xpath. 这样基本可以满足我们的需求, 不同的场景下, 方便程度也不同.
我觉得有时候css的选择器好处是, 可以对复杂的class进行解析, 因为有时候, 有的网页规则不规范, 比方说<div class="fruit phone">和<div class="phone fruit">其实是一样的, 但是在xpath中我们使用@class去提取的话, 会相对复杂一些, 另外有的<div class="phone ">像这种在class里面加了一个空格, xpath使用'//div[@class="phone"]'就会失效, 这时候可能就需要多写一段代码. 如果说使用css选择器就很简单, 不需要考虑这种class中有排序的问题, 可以使用'li.fruit.phone::text', 因此, 本文介绍这个parsel框架, 也主要是想结合两者的优势.
那能否二者结合使用呢? 当然是可以的.
parsel 是一个 Python 的第三方库,专门用于解析和提取 HTML 和 XML 数据。它基于 lxml 和 cssselect 构建,提供了强大且灵活的解析能力。结合了 lxml 和 cssselect 的优势, 在scrapy项目中, 也有类似的功能, 结合了css选择器和xpath.
parsel 具有以下优势:
- 简单:
parsel提供了一个非常简洁且直观的 API,使得解析 HTML/XML 数据变得非常简单。 - 强大的解析器:利用
parsel,我们就可以使用 CSS 或 XPath 选择器轻松地提取网页中的数据。这使得在定位和提取网页中的特定元素变得非常方便。因为有时通过css定位很快, 有时复杂的通过xpath很快. - 灵活性:
parsel不仅可以用于简单的网页抓取任务,还能够处理复杂的网页结构和数据提取需求。 - 与 Scrapy 兼容:
parsel与 Scrapy 框架高度兼容,经常被用于 Scrapy 项目中进行数据提取。这为需要进行大规模网页抓取的项目提供了极大的便利。
1 使用¶
1 安装和导入¶
执行其他操作前, 先导入模块.
2 创建选择器¶
html_text = """
<html>
<body>
<div id="content">
<h1>Hello, Orange!</h1>
<ul>
<li class="fruit">Orange</li>
<li class="fruit phone">Apple</li>
<li class="phone yylx">HuaWei</li>
</ul>
<ul>
<li class="phone">XiaoMi</li>
<li class="phone">OPPO</li>
</ul>
</div>
</body>
</html>
"""
html = Selector(text=html_text)
3 数据提取¶
使用 .get() 获取单个结果,或使用 .getall() 获取所有匹配的结果。
获取第一个标签的文本内容(获取结果数组的第一个).
获取第一个标签的所有文本内容的数组
获取节点的内部的所有文本(将文本拼接起来)
删除节点
提取属性
当然, 除了xpath和css, 我们也可以使用正则提取:
item = html.css('li').re('>(O.*?)<')
# ['Orange', 'OPPO']
item = html.css('li').re('>O.*?<')
# ['>Orange<', '>OPPO<']
2 关于¶
综合来看,parsel 是一个强大且灵活的工具,它融合了css选择器 & xpath & 正则表达式三种解析库, 非常适合于进行网页数据抓取和解析的各种项目。
最后, 欢迎关注我的微信公众号.¶
