美文网首页python大法攻略
Scrapy+redis分布式爬虫(四、CrawlSpider爬

Scrapy+redis分布式爬虫(四、CrawlSpider爬

作者: 眼君 | 来源:发表于2020-09-15 13:47 被阅读0次
    创建CrawlSpider爬虫

    之前,我们需要创建一个spider脚本时, 主要是使用genspider命令来实现:

    scrapy genspider <spider_name>  <aim_url>
    

    实际上我们还可以使用genspider命令生成其它类型的spider脚本, 以下命令可以遍历所以方式:

    scrapy genspider --list
    

    我们可以发现, 实际上genspider可以使用四种方式:basic、crawl、csvfeed和xmlfeed,我们之前默认使用的是basic方式。这次我们使用crawl方式在项目中生成一个crawl脚本:

    scrapy genspider -t crawl <爬虫名> <目标网站地址>
    

    脚本如下所示:

    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    
    class BkcrawlSpider(CrawlSpider):
        name = 'BKcrawl'
        allowed_domains = ['hz.ke.com']
        start_urls = ['http://hz.ke.com/chengjiao//']
    
        rules = (
            Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
        )
    
        def parse_item(self, response):
            item = {}
            #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
            #item['name'] = response.xpath('//div[@id="name"]').get()
            #item['description'] = response.xpath('//div[@id="description"]').get()
            return item
    
    Rule和LinkExtractor的用法

    crawlspider和之前的basespider脚本的显著区别是两者页面跳转逻辑不同:

    1. basespider通过parse函数之间回调来实现页面跳转,适合网页结构层次分明整齐的URL;
    2. 而crawlspider则是通过正则匹配URL实现页面跳转,适合URL结构具有一定规律的网页。
      crawlspider里用到了Rule和LinkExtractor两个类, 而LinkExtractor是Rule中的第一个参数, 用于解析URL。
      LinkExtractor的第一个参数allow是一个正则表达式, 满足该模式的URL才会被该rule解析;allow_domains记录允许解析的域名;restrict_xpaths用于限定只从哪种xpaths模式获取URL;tags用于限定只从哪种tags模式获取URL;attrs用于限定只从哪种attrs中获取URL;
      Rule中的follow用于决定对于解析的页面的URL是否进行进一步的解析。
    模拟登陆

    通过重写start_requests来实现模拟登陆。

    相关文章

      网友评论

        本文标题:Scrapy+redis分布式爬虫(四、CrawlSpider爬

        本文链接:https://www.haomeiwen.com/subject/zynzektx.html