zoukankan      html  css  js  c++  java
  • python爬虫scrapy之rules的基本使用

    Link Extractors

    Link Extractors 是那些目的仅仅是从网页(scrapy.http.Response 对象)中抽取最终将会被follow链接的对象。

    Scrapy默认提供2种可用的 Link Extractor, 但你通过实现一个简单的接口创建自己定制的Link Extractor来满足需求。

    每个LinkExtractor有唯一的公共方法是 extract_links ,它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。Link Extractors,要实例化一次并且 extract_links 方法会根据不同的response调用多次提取链接。

    Link Extractors在 CrawlSpider 类(在Scrapy可用)中使用, 通过一套规则,但你也可以用它在你的Spider中,即使你不是从 CrawlSpider 继承的子类, 因为它的目的很简单: 提取链接。

    上面都是官网解释,看看就行了,这个Rule啊其实就是为了爬取全站内容的写法,首先我们继承的就不是scrapy.spider类了,而是继承CrawlSpider这个类,看源码就回明白CrawlSpider这个类也是继承scrapy.spider类。

      具体参数:

      allow:这里用的是re过滤,我们其实就是start_urls加上我们这个匹配到的具体链接下的内容。    LinkExtractor:故名思议就是链接的筛选器,首先筛选出来我们需要爬取的链接。

      deny:这个参数跟上面的参数刚好想反,定义我们不想爬取的链接。

      follow:默认是false,爬取和start_url符合的url。如果是True的话,就是爬取页面内容所有的以start_urls开头的url。

      restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css 

      callback:定义我们拿到可以爬取到的url后,要执行的方法,并传入每个链接的response内容(也就是网页内容)

      注意:rule无论有无callback,都由同一个_parse_response函数处理,只不过他会判断是否有follow和callback

    from scrapy.spiders.crawl import Rule, CrawlSpider
    from scrapy.linkextractors import LinkExtractor
    

      

    示例:

    from whole_website.items import DoubanSpider_Book
    from scrapy.spiders.crawl import Rule, CrawlSpider
    from scrapy.linkextractors import LinkExtractor
    
    
    class DoubanSpider(CrawlSpider):
        name = "douban"
        allowed_domains = ["book.douban.com"]
        start_urls = ['https://book.douban.com/']
    
        rules = [
            Rule(LinkExtractor(allow='subject/d+'),callback='parse_items)
        ]
    
        def parse_items(self, response):
            items = DoubanSpider_Book()
            items['name'] = response.xpath('//*[@id="wrapper"]/h1/span/text()').extract_first()
            items['author'] = response.xpath('//*[@id="info"]//a/text()').extract()
            data = {'book_name':items['name'],
                    'book_author':items['author']
                    }
            print(data)
    

      

    参考地址:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/link-extractors.html

  • 相关阅读:
    九度OJ 1035:找出直系亲属(二叉树)
    while 循环的理解
    while 循环的理解
    count 变量的使用
    count 变量的使用
    数据结构与算法的实现 —— 结点定义与数据结构的选择
    数据结构与算法的实现 —— 结点定义与数据结构的选择
    最小生成树(MST,minimum spanning tree)
    最小生成树(MST,minimum spanning tree)
    Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
  • 原文地址:https://www.cnblogs.com/lei0213/p/7976280.html
Copyright © 2011-2022 走看看