scrapy的爬虫类总结

scrapy的爬虫类总结

scrapy存在两种爬虫类,一个是基于basic模板创建的普通爬虫类scrapy.Spider, 另一个是基于crawl的规则性爬虫类scrapy.spiders.CrawlSpider

1. scrapy.Spider类

scrapy.Spider是所有爬虫类的父类。当爬虫程序启动时,类中的start_requests()首先被调用。它的源码:

    def start_requests(self):
        cls = self.__class__
        if method_is_overridden(cls, Spider, 'make_requests_from_url'):
            warnings.warn(
                "Spider.make_requests_from_url method is deprecated; it "
                "won't be called in future Scrapy releases. Please "
                "override Spider.start_requests method instead (see %s.%s)." % 						    (
                  cls.__module__, cls.__name__
                ),
            )
            for url in self.start_urls:
                yield self.make_requests_from_url(url)
        else:
            for url in self.start_urls:
                yield Request(url, dont_filter=True)

在经过engine引擎的工作流程中, 发起的请求被成功下载之后,再次由爬虫类的parse()解析函数来解析。当解析完成之后,将解析中的数据item( dict / scarpy.Item子类对象 )。

对于普通的爬虫类来说,需要提供哪些属性:

name = '爬虫名'  # 日志记录器的名称
allowed_domains = ['网站的域名']  # 域名由ip和port组成的
start_urls = ['爬虫起始的网址或接口URL']  # 如果重写start_requests()方法时,可以不用此类属性


# 默认scrapy.Request()下载之后,没有指定callback时,由parse()函数解析
def parse(self, response):
   pass

普通爬虫类的创建

scrapy genspider 爬虫名 域名

默认情况下使用 basic的爬虫模板。

2. scrapy.spiders.CrawlSpider

规则爬虫是省略了一般的解析工作,它完成了感兴趣的连接文本提取。按rules中给定的Rule规则包含的LinkExtractor的allow/deny/restrict_xpaths/restrict_css的描述进行提取连接标签中的信息(href, text)。

一个规则爬虫类的属性,包含:

name = "爬虫名"
allowed_domains = []
start_urls = []   # 入口


# 爬虫规则
rules = [
   scrapy.spiders.Rule(
      LinkExtractor(allow=('正则1', '正则2'),  # 想要的
                    deny=('正则1''正则2'),   # 不想要的
                    restrict_xpaths=('包含a标签的(直接或间接)父标签1', '..'),
                    restrict_css=('', ''),
                    tags=('a', 'area'), # 指定感兴趣的标签名,
                    attrs=('href', )
                   ),  # 
      callback,
      follow=False,
      process_request='获取请求对象的函数'  # 指定函数,必须返回一个scrapy.Request子类对象
   ),
   scrapy.spiders.Rule(),
]

【注意】不能重写parse()解析函数,另个callback属性指定回调函数一定是字符描述,且不能带self。如

rules = [
    Rule(LinkExtractor(r'.*?\d+.html'), callback='parse_book'),
]

规则爬虫类的创建

scrapy genspider -t crawl 爬虫名  域名

使用crawl的爬虫模块创建爬虫类。

你可能感兴趣的:(scrapy的爬虫类总结)