Scrapy中的crawlspider爬虫

crawlspider

介绍

Scrapy框架中分两类爬虫

Spider类和CrawlSpider类。

crawlspider是Spider的派生类(一个子类),Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。

创建模板

创建 crawlspider 项目
scrapy genspider -t crawl 爬虫名 爬虫运行抓取的域名范围

栗子:

scrapy genspider -t crawl job_163 hr.163.com

具体参数和解释

import scrapy
from scrapy.linkextractors import LinkExtractor  # 连接提取器
from scrapy.spiders import CrawlSpider, Rule    # 导入CrawlSpider类,Rule规则

# CrawlSpider
class Job163Spider(CrawlSpider):
    name = 'job_163'
    allowed_domains = ['hr.163.com']
    start_urls = ['http://hr.163.com/']

    # 规则的元祖 规则可以有多个 存放 规则 对象
    rules = (
        # 创建了一个规则对象
        # LinkExtractor: 连接提取对象,allow 跟的是一个正则,根据这个正则表达式从响应中自动的去提取符合规则的url地址
        # callback: 指定 前面根据连接提取器规则 提取出来的url地址的响应交给哪一个解析函数去处理,接收的是一个方法名的字符串
        # callback 如果传了 表示需要去解析这个响应
        # callback 如果没传 表示不需要去解析这个响应
        # follow: 表示是否跟进,表示根据连接提取器提取出来的url地址的响应,是否还需要按照连接提取器的规则继续去提取url地址

        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

重点在rules中:
  • rules是一个元组或者是列表,包含的是Rule对象
  • Rule表示规则,其中包含LinkExtractor,callback和follow等参数
    • LinkExtractor:连接提取器,可以通过正则或者是xpath来进行url地址的匹配
    • callback :表示经过连接提取器提取出来的url地址响应的回调函数,可以没有,没有表示响应不会进行回调函数的处理
    • follow:连接提取器提取的url地址对应的响应是否还会继续被rules中的规则进行提取,True表示会,Flase表示不会

链接提取器LinkExtractor的更多常见参数

  • allow: 满足括号中的’re’表达式的url会被提取,如果为空,则全部匹配
  • deny: 满足括号中的’re’表达式的url不会被提取,优先级高于allow
  • allow_domains: 会被提取的链接的domains(url范围),如:['hr.tencent.com', 'baidu.com']
  • deny_domains: 不会被提取的链接的domains(url范围)
  • restrict_xpaths: 使用xpath规则进行匹配,和allow共同过滤url,即xpath满足的范围内的url地址会被提取,如:restrict_xpaths='//div[@class="pagenav"]'
上一篇:浅谈线程安全


下一篇:数组转list的坑