parsel
parsel的API和Scrapy选择器的API高度相似,因为Scrapy选择器的是二次封装了parsel,类似于request和urllib.
parsel可以解析XML和HTML,支持Xpath和CSS选择器对内容的提取,同时融合了正则表达式,可以说是前面几个工具的综合.
使用实例
html = '''
<div id='container'>
<li class='list'>first</li>
<li><a href = 'item2'>second</a></li>
<li><a href = 'item3'><span>third</span></a></li>
<li><a href = 'item4'>fourth</a></li>
<li><a href = 'item5'>fifth</a></li>
</div>
'''
from parsel import Selector
selector = Selector(text = html) ##调用Selector类构造一个Selector对象
css1 = selector.css('#container') ##传入css选择器
css2 = selector.css('li') ##传入css选择器,这个返回的是一个可迭代对象
xml1 = selector.xpath('//li[contains(@class,"list")]')
xml2 = selector.xpath('//li/a[@href="item2"]')
for item in css1:
print(item)
print(item.xpath(".//text()").get()) ##遍历获取文本内容
result_href = xml2.css('a::attr(href)').get() ## css获取属性
print(result_href)
result_href = xml2.xpath('//a/@href').get() ##xpath获取属性
print(result_href)
## 正则的使用
re = selector.re('<li><a.*?>.*?</a></li>')
print(re)
re = selector.re_first('<li><a.*?>.*?</a></li>')
print(re) ##返回第一个匹配字符串