Selector对象
从页面中提取数据的核心技术是http文本解析,在python中常用的方式有两种
- BeautifulSoup
BeautifulSoup是非常流行的HTTP解析库,API简洁易用,但解析速度较慢。 - lxml
lxml是一套由C语言编写的xml解析库(libxml2),解析速度更快,API相对复杂。
Scrapy综合上述两个方式的优点,基于lxml库构建,并简化了API接口,在Scrapy中使用Selector对象提取页面中的数据,使用时先通过XPath或CSS选择器选中页面中要提取的数据,然后进行提取。
创建对象
from scrapy.selector import Selector
text = '''<html>
<body>
<h1>Hello World</h1>
<h1>Hello Scrapy</h1>
<b>Hello python</b>
<ul>
<li>C++</li>
<li>Java</li>
<li>Python</li>
</ul>
</body>
</html> '''
selector = Selector(text=text)
输出:<Selector xpath=None data='<html>\n <body>\n ...'>
选取数据
调用Selector对象的xpath方法或css方法(传入XPath或CSS选择器表达 式),可以选中文档中的某个或某些部分:
selector_list = selector.xpath('//h1')
输出:[<Selector xpath='//h1' data='<h1>Hello World</h1>'>, <Selector xpath='//h1' data='<h1>Hello Scrapy</h1>'>]
for i in selector_list:
print(i.xpath('./text()'))
输出:[<Selector xpath='./text()' data='Hello World'>]
[<Selector xpath='./text()' data='Hello Scrapy'>]
xpath()和css()方法返回的是一个SelectorList对象,其中包含每个被选中部分对应的Selector对象,SelectorList支持列表接口,可使用for语句迭代访问其中的每一个Selector对象。SelectorList对象也有xpath和css方法,调用它们的行为是:以接收到的参数分别调用其中每一个Selector对象的xpath或css方法,并将所有结果收集到一个新的SelectorList对象返回给用户。
提取数据
调用Selector或SelectorLis对象的以下方法可将选中的内容提取:
- extract() :返回选中内容的Unicode字符串
- re() :使用正则表达式来选取内容
- extract_first() (SelectorList专有)
- re_first() (SelectorList专有)
sl = selector.xpath('//li/text()')
print(sl)
print(sl.extra

最低0.47元/天 解锁文章
993

被折叠的 条评论
为什么被折叠?



