将选择器与正则表达式一起使用¶Selector 也有一个 .re() 使用正则表达式提取数据的方法。但是,与使用 .xpath() 或 .css() 方法: .re() 返回字符串列表。所以您不能构造嵌套的 .re() 电话。
下面是一个用于从 HTML code 以上: >>> response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')
['My image 1',
'My image 2',
'My image 3',
'My image 4',
'My image 5']
另外还有一个助手在做往复运动 .get() (及其别名) .extract_first() 为 .re() 命名 .re_first() . 使用它只提取第一个匹配字符串: >>> response.xpath('//a[contains(@href, "image")]/text()').re_first(r'Name:\s*(.*)')
'My image 1'
extract()和extract_first()。¶如果你是一个长期的垃圾用户,你可能熟悉 .extract() 和 .extract_first() 选择器方法。许多博客文章和教程也在使用它们。这些方法仍然由Scrapy支持,有 没有计划 去贬低他们。 但是,现在使用 .get() 和 .getall() 方法。我们认为这些新方法会产生更简洁和可读的代码。 下面的例子展示了这些方法如何相互映射。 SelectorList.get() 是一样的 SelectorList.extract_first() :
>>> response.css('a::attr(href)').get()
'image1.html'
>>> response.css('a::attr(href)').extract_first()
'image1.html'
SelectorList.getall() 是一样的 SelectorList.extract() :
>>> response.css('a::attr(href)').getall()
['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']
>>> response.css('a::attr(href)').extract()
['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']
Selector.get() 是一样的 Selector.extract() :
>>> response.css('a::attr(href)')[0].get()
'image1.html'
>>> response.css('a::attr(href)')[0].extract()
'image1.html'
为了保持一致性,还有 Selector.getall() ,返回一个列表: >>> response.css('a::attr(href)')[0].getall()
['image1.html']
所以,主要的区别在于 .get() 和 .getall() 方法更容易预测: .get() 总是返回单个结果, .getall() 始终返回所有提取结果的列表。用 .extract() 方法:结果是否为列表并不总是显而易见的;或者得到一个单独的结果 .extract() 或 .extract_first() 应该被调用。 |