Scrapy
功能学习
1 scrapy
数据提取
Scrapy
还提供了自己的数据提取方法,即 Selector
(选择器)。Selector
是基于 lxml
来构建的,支持 XPath
选择器、CSS
选择器以及正则表达式,功能全面,解析速度和准确度非常高
1.1. 直接使用
Selector
是一个可以独立使用的模块。我们可以直接利用Selector
这个类来构建一个选择器对象,然后调用它的相关方法如 xpath
、css
等来提取数据。
例如,针对一段 HTML
代码,我们可以用如下方式构建 Selector
对象来提取数据:
1.2 xpath
选择器
1.2.1 测试代码
html = '''
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>
'''
构建对象
response = Selector(text=html)
节点提取
result = response.xpath('//a')
注:这里面的话就使用常规xpath
语法就好拉
1.3 正则匹配
Scrapy
的选择器还支持正则匹配。比如,在示例的 a
节点中的文本类似于Name: My image 1
,现在我们只想把 Name:
后面的内容提取出来,这时就可以借助re
方法
response.xpath('//a/text()').re('Name:\s(.*)')
给 re()
方法传了一个正则表达式,其中 (.*) 就是要匹配的内容
print(response.xpath('//a/text()').re('(.*?):\s(.*)&#