当前位置 博文首页 > 小旺的博客:精通Scrapy网络爬虫【六】LinkExtractor提取链接

    小旺的博客:精通Scrapy网络爬虫【六】LinkExtractor提取链接

    作者:[db:作者] 时间:2021-07-17 09:46

    用LinkExtractor提取链接

    1.导入LinkExtractor

    2.创建一个LinkExtractor对象,使用一个或多个构造器参数描述提取规则,这里传递给restrict_css参数一个CSS选择器表达式。它描述出下一页链接所在的区域(在li.next下)。

    3.调用LinkExtractor对象的extract_links方法传入一个Response对象,该方法依据创建对象时所描述的提取规则,在Response对象所包含的页面中提取链接,最终返回一个列表,其中的每一个元素都是一个Link对象,即提取到的一个链接

    4.用links[0]获取Link对象,用其构造Request对象并提交。

    import scrapy
    
    from ..items import BookItem
    from scrapy.linkextractors import LinkExtractor
    
    class BookSpiderSpider(scrapy.Spider):
        name = 'book_spider'
        # allowed_domains = ['http://books.toscrape.com/']
        start_urls = ['http://books.toscrape.com//']
    
        def parse(self, response):
            for book in response.css('article.product_pod'):
                books=BookItem()
                books['name']=book.xpath('./h3/a/@title').extract_first()
                books['price']=book.css('p.price_color::text').extract_first()
                yield books
            # next_url=response.css('ul.pager li.next a::attr(href)').extract_first()
            # if next_url:
            #     next_url=response.urljoin(next_url)
            #     yield scrapy.Request(next_url,callback=self.parse)
            
            le=LinkExtractor(restrict_css='ul.pager li.next')
            links=le.extract_links(response)
            if links:
                next_url=links[0].url
                yield scrapy.Request(next_url,callback=self.parse)
                
    

    参数描述:
    参数:
    allow (a regular expression (or list of)) – 必须要匹配这个正则表达式(或正则表达式列表)的URL才会被提取。如果没有给出(或为空), 它会匹配所有的链接。

    deny (a regular expression (or list of)) – 与这个正则表达式(或正则表达式列表)的(绝对)不匹配的URL必须被排除在外(即不提取)。它的优先级高于 allow 的参数。如果没有给出(或None), 将不排除任何链接。

    allow_domains (str or list) – 单值或者包含字符串域的列表表示会被提取的链接的domains。

    deny_domains (str or list) – 单值或包含域名的字符串,将不考虑提取链接的domains。

    deny_extensions (list) – 应提取链接时,可以忽略扩展名的列表。如果没有给出, 它会默认为 scrapy.linkextractor 模块中定义的 IGNORED_EXTENSIONS 列表。

    restrict_xpaths (str or list) – 一个的XPath (或XPath的列表),它定义了链路应该从提取的响应内的区域。如果给定的,只有那些XPath的选择的文本将被扫描的链接。见下面的例子。

    tags (str or list) – 提取链接时要考虑的标记或标记列表。默认为 ( ‘a’ , ‘area’) 。

    attrs (list) – 提取链接时应该寻找的attrbitues列表(仅在 tag 参数中指定的标签)。默认为 (‘href’)。

    canonicalize (boolean) – 规范化每次提取的URL(使用scrapy.utils.url.canonicalize_url )。默认为 True 。

    unique (boolean) – 重复过滤是否应适用于提取的链接。

    process_value (callable) – 见:class:BaseSgmlLinkExtractor 类的构造函数 process_value 参数。

    参考资料:Scrapy官方文档
    《精通Scrapy网络爬虫》刘硕 清华大学出版社

    cs