Scrapy中的Request和Response对象的参数

Request对象在爬虫程序中生成并传递到scrapy engine(引擎),直到它们到达downloader(下载器),后者执行请求并返回一个Response对象,该对象返回到发出请求的爬虫程序。

Request对象

class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])

参数:

  • url(string) : 请求的网址
  • callback(): 将使用此请求的响应(一旦下载)调用的函数作为其第一个参数。
  • method(string): 此请求的HTTP方法。默认为’GET’。
  • meta(dict) : Request.meta属性的初始值。如果给定,则此参数中传递的dict将被浅拷贝。
  • body(str或unicode): 请求体。不管这个参数的类型,存储的最终值将是一个str(不会是unicode或None)。
  • headers(dict): 请求头。dict值可以是字符串或列表。如果 None作为值传递,则不会发送HTTP头。
  • cookie(dict或list) - 请求cookie

Response对象

class scrapy.http.Response(url[, status=200, headers=None, body=b'', flags=None, request=None])

参数:

  • url(string) - 此响应的URL
  • status(integer) - 响应的HTTP状态。默认为200。
  • headers(dict) - 这个响应的头。dict值可以是字符串或列表。
  • body(str) - 响应体。它必须是str,而不是unicode,除非你使用一个编码感知响应子类,如 TextResponse。
  • flags(list) - 是一个包含属性初始值的 Response.flags列表。如果给定,列表将被浅拷贝。
  • request(Requestobject) - 属性的初始值Response.request。这代表Request生成此响应。

Request中的meta参数

在Scrapy中爬多页面的数据且要保存到一个文件中时,即同一个文件存储不同的数据:
爬虫程序通过Request对象将数据(data)传递给ScrapyEngine(引擎),由引擎传递给pipeline(管道模块)
在这里 meta={} 实现传递数据的功能

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    
    url = "http://www.example.com/some_page.html"
    yield scrapy.Request(url,callback=self.parse_page2,meta={'item':item})
 
def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    yield item

你可能感兴趣的:(爬虫)