笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

选择器

发布者: 笨鸟自学网



将选择器与正则表达式一起使用

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() 方法。我们认为这些新方法会产生更简洁和可读的代码。

下面的例子展示了这些方法如何相互映射。

  1. SelectorList.get() 是一样的 SelectorList.extract_first() :

    >>> response.css('a::attr(href)').get()
    'image1.html'
    >>> response.css('a::attr(href)').extract_first()
    'image1.html'
    
  2. 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']
    
  3. Selector.get() 是一样的 Selector.extract() :

    >>> response.css('a::attr(href)')[0].get()
    'image1.html'
    >>> response.css('a::attr(href)')[0].extract()
    'image1.html'
    
  4. 为了保持一致性,还有 Selector.getall() ,返回一个列表:

    >>> response.css('a::attr(href)')[0].getall()
    ['image1.html']
    

所以,主要的区别在于 .get() 和 .getall() 方法更容易预测: .get() 总是返回单个结果, .getall() 始终返回所有提取结果的列表。用 .extract() 方法:结果是否为列表并不总是显而易见的;或者得到一个单独的结果 .extract() 或 .extract_first() 应该被调用。


上一篇:蜘蛛下一篇:项目

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-12-4 16:08 , Processed in 0.013712 second(s), 17 queries .

© 2001-2020

返回顶部