前言
- XPath 即为XML路径语言(XML Path Language)
- 层叠样式表(Cascading Style Sheets)是一种用来表现 HTML或XML等文件样式的计算机语言
-
parsel 是从 Scrapy 独立出来的解析器,可以用 XPath 或 CSS 提取 XML 或 HTML
实例
XPath 取字符串包含的方法
>>> from parsel import Selector
>>> htmlText = r'''
<html>
<body>
<div>
<em>Cancer Discovery</em><br>
eISSN: 2159-8290<br>
ISSN: 2159-8274<br>
</div>
</body>
</html>'''
>>> sel = Selector(htmlText, type='html')
# 包含
>>> sel.xpath('/html/body/div/text()[contains(., "eISSN")]').get()
'\n eISSN: 2159-8290'
# 不包含
>>> sel.xpath('/html/body/div/text()[not(contains(., "eISSN"))]').getall()
['\n ', '\n ISSN: 2159-8274', '\n ']
XPath 与 CSS 比对
>>> from parsel import Selector
>>> htmlText = r'''
<html>
<body>
<div class="value test">111</div>
<div class="value test ">222</div>
<div class="first value test last">333</div>
<div class="test value">444</div>
</body>
</html>'''
>>> sel = Selector(htmlText, type='html')
# 精确匹配 111
>>> sel.xpath('/html/body/div[@class="value test"]/text()').get()
'111'
>>> sel.css('div[class="value test"]::text').get()
'111'
# 匹配 111、222、333
>>> sel.xpath('/html/body/div[contains(@class, "value test")]/text()').getall()
['111', '222', '333']
>>> sel.css('div[class*="value test"]::text').getall()
['111', '222', '333']
# 匹配 111、222、333、444
>>> sel.xpath('/html/body/div[contains(@class, "value") and contains(@class, "test")]/text()').getall()
['111', '222', '333', '444']
>>> sel.css('div.value.test::text').getall()
['111', '222', '333', '444']
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。