Scrapy
使用Request
和Response
对象来爬行网站。通常,Request
对象是在爬虫中生成的,并在整个系统中传递,直到它们到达下载器,后者执行请求并返回一个Response
对象,该对象返回发出Request
的爬虫。
Request
和Response
类都有子类,这些子类添加了基类中不需要的功能。这些将在下面的Request
子类和Response
子类中进行描述
Request
scrapy.http.Request(*args, **kwargs)
类,表示HTTP请求,该请求通常在爬虫中生成并由下载器执行,从而生成Response
。scrapy.http.Request(*args, **kwargs)
类接收以下参数:
url
: 此请求的URL,str
类型。如果该URL无效,则会引发ValueError
异常|callback
: 将使用此请求的响应作为其第一个参数来调用的函数,collections.abc.Callable
类型method
: 此请求的HTTP方法,str
类型。默认为GET
meta
:Request.meta
熟悉的初始值,dict
类型。如果给定,则将浅拷贝传入此dictbody
: 请求主体。bytes或str类型headers
: 此请求的标头, dict类型。注意:如果需要为请求设置cookie,请使用cookies参数cookies
: 请求cookies, dict或list。
from scrapy.http import Request
# 使用DICT
request_with_cookies = Request(url='http://www.example.com',
cookies={
'currency': 'USD', 'country': 'UY'})
# 使用LIST
request_with_cookies = Request(url='http://www.example.com',
cookies=[{
'name': 'currency',
'value': 'USD',
'domain': 'example.com',
'path': '/currency'
}])
List类型cookies允许自定义cookies的domain
和path
属性。这只在为以后得请求保存cookies时有用。
encondig
: 此请求的编码,str
类型。默认为utf-8
priority
: 此请求的优先级,int
类型,默认为0
dont_filter
: 指示调度器不应筛选此请求,bool
类型,默认为False。当您希望多次执行相同的请求时,可以使用此选项忽略重复的筛选器errback
: 如果在处理请求时引发任何异常,则将调用该函数,这包括出现404错误等错误的页面,collections.abc.Callable
类型。flags
: 发送到请求的标志,可用于日志记录或类似用途,list
类型cb_kwargs
: 具有任意数据的dict,将作为关键字参数传递到请求的回调,dict类型。
Request
除了接收上面这些参数之外,它还具有以下属性和方法:
url
: 此请求的URL的字符串。此属性是只读的,如果想要更改请求的URL,请使用Request.replace()
方法method
: 表示请求中HTTP方法的字符串,而且是大写的,例如GET
,POST
等。headers
: 包含请求头的类似字典的对象body
: 以bytes表示的请求正文。此属性是只读的,要更改请求正文,请使用Request.replace()
方法meta
: 包含此请求的任意元数据的dict。cb_kwargs
: 包含此请求的任意元数据的字典,它的内容将作为关键字参数传递给请求的回调copy()
: 返回一个新的请求,它是此请求的副本。replace([url, method, headers, body, cookies, meta, flags, encoding, priority, dont_filter, callback, errback, cb_kwargs])
: 返回一个具有相同成员的Request
对象,但由指定的关键字参数赋予新值的成员除外。这个cb_kwargs
和meta
默认情况下,属性被浅复制classmethod from_curl(curl_command, ignore_unknown_options=True, **kwargs)
: 从包含cURL命令的字符串创建Request
对象。它填充HTTP方法、URL、报头、Cookie