Scrapy通用爬虫

通用爬虫

主要时通过继承 CrawlSpider, 定义一些爬去的规则来实现页面的提取

CrawlSpider

  • 它继承自 Spider 类,除了spider的所有方法和属性之外,它还提供了几个特殊的属性

rules

  • 爬取的规则,包含一个或者多个Rule的对象的列表,每个 Rule 对爬取网站的动作都做了定义

parse_start_url

  • 它时一个可以重写的方法,当start_urls里对应的Request得到Response时,该方法被调用,它会分析Response并返回Item对象或者Request对象

 

定义rule时的参数

  
  class scrapy.contrib.spiders.Rule(link_extractor, callback=None, follow=None, 

                                    cb_kwargs=None, follow=None, process_links=None,     

                                    process_request=None)

link_extractor:

  • 定义爬虫需要爬去的链接,时LinkExtractor对象

callback:

  • 回调函数,应该避免使用parse()函数作为回掉,避免覆盖原函数

cb_kwargs:

  • 字典,它包含传递给回掉函数的参数

follow:

  • 布尔值,即True或False,它指定根据该规则从Response提取的链接是否需要跟进,如果callback参数为None,follow默认设置为True,否则默认是False

process_links:

  • 指定处理函数,从link_extractor中获取到链接列表时,该函数会调用

process_request:

  • 指定处理函数,根据Rule提取到每个Request时,该函数将会调用,对Request进行处理,该函数必须返回Resquest或者None

Item Loader 提取item

  • 提供一种便捷的方法机制来帮助我们方便的提取Item

  
  class scrapy.loader.ItemLoader([item, selector, response, ] **kwargs)

item:

  • 时 Item 对象,可以调用 add_xpath()、add_css、add_value()等方法来填充Item对象

selector:

  • Selector对象,用来提取填充数据的选择器

response

  • Response对象,用于构建选择器的 Response

例如:

  
  ​
  from scrapy.loader import ItemLoader
  from project.items import Product
  ​
  def parse(self, response):
      loader = ItemLoader(item=Product(), response=response)
      loader.add_xpath('name', '//div[@class="name"]')
      loader.add_css("stock", 'p#stock')
      loader.add_value('last_updated', 'today')
      return loader.load_item()

ItemLoader每个字段都可以包含一个Input Process和Output Process 输入输出处理器,Input Process 收到数据时会立刻对数据进行处理,并保存在itemloader中,当所有数据收集完后,调用load_item方法填充item对象,调用时会先调用Output Processor来处理之前收集的数据,再存入Item中

Processor

  • Identity:不处理,返回元数据

  • TakeFirst: 返回列表的第一个非空值

  • Join:拼接,类似字符串的拼接,默认使用空格,也可以自定义拼接方法

  • Compose:处理字符串,用给定的多个函数处理,依次会经过每个函数处理,如:Compose(str.upper, lambda s: s.strip())

  • MapCompose:迭代处理结果的列表,其他和 Compose相同

  • SelectJmes:可以查询 Json,传入值为 Key,返回 value pip install jmespath

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值