[关闭]
@songying 2018-07-18T11:38:56.000000Z 字数 1831 阅读 1214

Scrapy之Spider类

Scrapy


Spiders

Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。

爬取流程如下:

  1. 以初始的URL初始化Request,并设置回调函数。 当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数。

    spider中初始的request是通过调用 start_requests() 来获取的。 start_requests() 读取 start_urls 中的URL, 并以 parse 为回调函数生成 Request

  2. 在回调函数内分析返回的(网页)内容,返回 Item 对象或者 Request 或者一个包括二者的可迭代容器。 返回的Request对象之后会经过Scrapy处理,下载相应的内容,并调用设置的callback函数(函数可相同)。

  3. 在回调函数内,您可以使用 选择器(Selectors) (您也可以使用BeautifulSoup, lxml 或者您想用的任何解析器) 来分析网页内容,并根据分析的数据生成item。

  4. 最后,由spider返回的item将被存到数据库(由某些 Item Pipeline 处理)或使用 Feed exports 存入到文件中。

1. Spider类

  1. class scrapy.spider.Spider # 每个其他的spider必须继承自该类

为了创建一个Spider,您必须继承 scrapy.Spider 类, 且定义以下三个属性:name, start_requests()方法, parse()方法。

官方解释

中文

该方法必须返回一个可迭代对象(iterable)。该对象包含了spider用于爬取的第一个Request。

当spider启动爬取并且未制定URL时,该方法被调用。 该方法的默认实现是使用 start_urls 的url生成Request。

如果您想要修改最初爬取某个网站的Request对象,您可以重写(override)该方法。 例如,如果您需要在启动时以POST登录某个网站,你可以这么写:

  1. def start_requests(self):
  2. return [scrapy.FormRequest("http://www.example.com/login",
  3. formdata={'user': 'john', 'pass': 'secret'},callback=self.logged_in)]
  4. def logged_in(self, response):
  5. # here you would extract links to follow and return Requests for
  6. # each of them, with another callback
  7. pass

参数:response (Response) – 用于分析的response

当response没有指定回调函数时,该方法是Scrapy处理下载的response的默认方法。

该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

  1. import scrapy
  2. class QuotesSpider(scrapy.Spider):
  3. name = "quotes"
  4. def start_requests(self):
  5. url = 'http://quotes.toscrape.com/page/1/'
  6. yield scrapy.Request(url=url, callback=self.parse)
  7. def parse(self, response):
  8. # 对Response对象的操作
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注