python大法攻略

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

2020-09-15  本文已影响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来实现模拟登陆。

上一篇下一篇

猜你喜欢

热点阅读