本文为译文,原文见地址:https://docs.scrapy.org/en/latest/topics/request-response.html
请求和响应(Requests and Responses)
Scrapy使用Request和Response对象来爬行web站点。
通常来说,Request对象在爬虫中生成,并且系统中传递,直到它们到达下载器(Downloader),下载器执行请求并返回Response对象,Response对象返回到发出请求的爬虫。
Request和Response类都可以有子类,这些子类添加了基类中不是必须的功能。后续会有介绍。
Request对象
class scrapy.http.Request(url[, callback, method=‘GET’, headers, body, cookie, meta, encoding=‘utf-8’, priority=0, dont_filter=False, errback, flags])
一个Request对象代表一个HTTP请求,Request对象通常在爬虫(Spider)中生成,并且由下载器(Downloader)执行,最终的结果生成一个Response对象。
参数:
-
url(string)- 该请求的url
-
callback(callable)- 回调函数,调用这个函数时的第一个参数,是该请求的响应(下载后)。想要获取更多信息,请见后面的传递附加数据到回调函数。如果一个Request没有指定callback,那么将默认使用爬虫的parse()函数。注意,如果在处理过程中出现了异常,那么将会调用errback而不是callback。
-
method(string)- 该请求的HTTP函数。默认为’GET’。
-
meta(dict)- Request.meta属性的初始值。如果给定了该值,该参数传递的字典将被浅拷贝。
-
body(str或者unicode)- 请求的body。如果传递了一个unicode,那么将使用传递的encoding参数(默认为utf-8)来将其转码为str。如果body没有给定,将存储一个空字符串。不论这个参数的类似那个是什么,最终存储的都将是一个str(不管unicode或是None)。
-
header(dict)- 该请求的头。这个字典的值可以是字符串(单独值的头)或者列表(多个值的头)。如果传递了None作为值,HTTP头将根本不会被发送。
-
cookies(dict或者list)- 请求的cookies。可以是以下两种格式。
-
使用字典:
request_with_cookies = Request(url='http://www.example.com', cookies={ 'currency': 'USD', 'country': 'UY'})
-
使用字典的列表:
request_with_cookies = Request(url='http://www.example.com', cookies=[{ 'name': 'currency', 'value': 'USD', 'domain': 'example.com', 'path': '/currency'}])
-
后一种形式允许自定义cookie的domain和path属性。这只有在cookie被保存,以备后续的请求可以使用。
当一些站点返回了cookies(在响应中),这些cookie将被存储在domain的cookie中,并且后续的请求中都需要带有这些cookie。这是任何常用的web浏览器都带有的典型行为。然而,如果为了某些原因,你希望避免合并已经存在的cookie,你可以在Request.meta中设置dont_merge_cookies关键字为True来指示Scrapy这样做。
请求不带合并cookie,示例如下:
request_with_cookie = Request(url='http://www.example.com', cookies={
'currency': 'USD', 'country': 'UY'}, meta={
'dont_merge_cookies': True})
更多信息请见CookiesMiddleware。
- encoding(string)- 该请求的编码(默认为’utf-8’)。这个编码将被用于URL的百分比编码,并且将正文转为str(如果给定的是unicode)。
- priority(int)- 该请求的优先级(默认为0)。这个优先级被用于调度器,调度器根据这个优先级定义需要处理的请求的先后顺序。更高优先级值的请求将会越早执行。为了表示相对较低的优先级,允许这个值为负数。
- dont_filter(boolean)- 指示该请求不应该被调度器所筛选。这通常用于当你希望多次执行同一个指定的请求,为了忽略重复筛选器。需要小心使用这个参数,否则你可能调用爬行循环。默认值为False。
- errback(callable)- 回调函数,在处理请求的过程中如果有任何异常被抛出,则调用此函数。比如访问页面失败并返回404HTTP错误,等等。这个函数接受一个Twisted Failure实例作为第一个参数。有关更多信息,参见下面的使用errback来捕获请求处理过程中的异常。
- flags(list)- 发送给请求的flags,可以被用于记录日志或者类似目的。
url
一个包含了该请求的URL字符串。请记住,这个属性包含的是转义后的URL,因此它可能会与传递给构造函数中的URL不同。
这个属性是一个只读属性。若要改变请求的URL,请使用replace()。
method
在请求中