请求和响应¶
零星用途 Request
和 Response
用于对网站进行爬网的对象。
通常, Request
对象在spider中生成并在系统中传递,直到它们到达下载程序,下载程序执行请求并返回 Response
返回发出请求的spider的对象。
两个 Request
和 Response
类具有子类,这些子类添加了基类中不需要的功能。这些在下面的 请求子类 和 响应子类 .
请求对象¶
- class scrapy.http.Request(*args, **kwargs)[源代码]¶
表示HTTP请求,该请求通常在爬行器中生成并由下载程序执行,从而生成
Response
。- 参数
url (str) -- 此请求的URL如果该URL无效,则
ValueError
引发异常。callback (collections.abc.Callable) -- 将使用此请求的响应(一旦下载)作为其第一个参数来调用的函数。有关详细信息,请参阅 向回调函数传递附加数据 下面。如果请求没有指定回调,则爬行器的
parse()
方法。请注意,如果在处理过程中引发异常,则改为调用errback。method (str) -- 此请求的HTTP方法。默认为
'GET'
.meta (dict) -- 的初始值
Request.meta
属性。如果给定,则将浅复制传入此参数的dict。body (bytes or str) -- 请求主体。如果传递了一个字符串,则使用
encoding
通过(默认为utf-8
)如果body
如果未给定,则存储空字节对象。不管这个参数的最后一个值是什么,都不会被存储None
)headers (dict) -- 此请求的标头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。如果
None
作为值传递,则根本不会发送HTTP标头。。。注意::Cookie通过Cookie
标头不会被 CookiesMiddleware 。如果需要为请求设置cookie,请使用Request.cookies
参数。这是一个正在处理的已知电流限制。请求cookies。这些可以用两种形式发送。
使用DICT::
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'}])
后一个表单允许自定义
domain
和path
cookie的属性。只有在为以后的请求保存cookie时,这才有用。当某些站点返回cookies(在响应中)时,这些cookies存储在该域的cookies中,并将在以后的请求中再次发送。这是任何普通网络浏览器的典型行为。
若要创建不发送存储的Cookie也不存储接收的Cookie的请求,请将
dont_merge_cookies
进入以下位置的关键字True
在……里面request.meta
。发送手动定义的cookie并忽略cookie存储的请求示例:
Request( url="http://www.example.com", cookies={'currency': 'USD', 'country': 'UY'}, meta={'dont_merge_cookies': True}, )
有关详细信息,请参阅 CookiesMiddleware .
警告
Cookie通过
Cookie
标头不会被 CookiesMiddleware 。如果需要为请求设置cookie,请使用Request.cookies
参数。这是一个正在处理的已知电流限制。encoding (str) -- 此请求的编码(默认为
'utf-8'
). 此编码将用于对URL进行百分比编码,并将正文转换为字节(如果以字符串形式给出)。priority (int) -- 此请求的优先级(默认为
0
)调度程序使用优先级定义用于处理请求的顺序。优先级值较高的请求将更早执行。允许负值以表示相对较低的优先级。dont_filter (bool) -- 指示调度程序不应筛选此请求。当您希望多次执行相同的请求时,可以使用此选项忽略重复的筛选器。小心使用,否则会进入爬行循环。默认为
False
.errback (collections.abc.Callable) -- 如果在处理请求时引发任何异常,则将调用的函数。这包括404 HTTP错误等失败的页面。它收到一个
Failure
作为第一个参数。有关详细信息,请参阅 使用errbacks捕获请求处理中的异常 下面。。版本更改::2.0 回调 当 错误 参数已指定。flags (list) -- 发送到请求的标志可用于日志记录或类似用途。
cb_kwargs (dict) -- 具有任意数据的dict,将作为关键字参数传递到请求的回调。
- method¶
表示请求中HTTP方法的字符串。这保证是大写的。例子:
"GET"
,"POST"
,"PUT"
等
- headers¶
包含请求头的类似字典的对象。
- meta¶
包含此请求的任意元数据的dict。对于新请求,此dict是空的,通常由不同的零碎组件(扩展、中间产品等)填充。所以这个dict中包含的数据取决于您启用的扩展名。
见 请求.meta特殊键 获取scrapy识别的特殊元键列表。
这个字典是 shallow copied 当使用
copy()
或replace()
方法,也可以通过response.meta
属性。
- cb_kwargs¶
包含此请求的任意元数据的字典。它的内容将作为关键字参数传递给请求的回调。对于新请求,它为空,这意味着默认情况下,回调只获取
Response
对象作为参数。这个字典是 shallow copied 当使用
copy()
或replace()
方法,也可以通过response.cb_kwargs
属性。在处理请求失败的情况下,此dict可以作为
failure.request.cb_kwargs
在请求的errback中。有关详细信息,请参阅 访问errback函数中的其他数据 .
- attributes: Tuple[str, ...] = ('url', 'callback', 'method', 'headers', 'body', 'cookies', 'meta', 'encoding', 'priority', 'dont_filter', 'errback', 'flags', 'cb_kwargs')¶
的元组
str
对象,这些对象包含类的所有公共属性的名称,这些属性也是__init__
方法。当前由以下人员使用
Request.replace()
,Request.to_dict()
和request_from_dict()
。
- copy()[源代码]¶
返回一个新请求,它是此请求的副本。参见: 向回调函数传递附加数据 .
- replace([url, method, headers, body, cookies, meta, flags, encoding, priority, dont_filter, callback, errback, cb_kwargs])[源代码]¶
返回具有相同成员的请求对象,除了那些通过指定的关键字参数赋予新值的成员。这个
Request.cb_kwargs
和Request.meta
默认情况下,属性被浅复制(除非新值作为参数提供)。另请参见 向回调函数传递附加数据 .
- classmethod from_curl(curl_command: str, ignore_unknown_options: bool = True, **kwargs) scrapy.http.request.RequestTypeVar [源代码]¶
从包含 cURL 命令。它填充HTTP方法、URL、头、cookies和主体。它接受与
Request
类,获取首选项并重写cURL命令中包含的相同参数的值。默认情况下,将忽略无法识别的选项。若要在查找未知选项时引发错误,请通过传递调用此方法
ignore_unknown_options=False
.警告
使用
from_curl()
从Request
子类,例如JSONRequest
或XmlRpcRequest
,以及 downloader middlewares 和 spider middlewares 启用,例如DefaultHeadersMiddleware
,UserAgentMiddleware
或HttpCompressionMiddleware
,可以修改Request
对象。要将cURL命令转换为Scrapy请求,可以使用 curl2scrapy .
- to_dict(*, spider: Optional[scrapy.spiders.Spider] = None) dict [源代码]¶
返回包含请求数据的字典。
使用
request_from_dict()
要将其转换回Request
对象。如果给定了爬行器,此方法将尝试找出用作回调和错误回调的爬行器方法的名称,并将它们包括在输出字典中,如果找不到它们,则引发异常。
向回调函数传递附加数据¶
请求的回调是一个函数,在下载请求的响应时将调用该函数。将使用下载的 Response
对象作为其第一个参数。
例子::
def parse_page1(self, response):
return scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.logger.info("Visited %s", response.url)
在某些情况下,您可能对向这些回调函数传递参数感兴趣,以便稍后在第二个回调中接收这些参数。下面的示例演示如何通过使用 Request.cb_kwargs
属性:
def parse(self, response):
request = scrapy.Request('http://www.example.com/index.html',
callback=self.parse_page2,
cb_kwargs=dict(main_url=response.url))
request.cb_kwargs['foo'] = 'bar' # add more arguments for the callback
yield request
def parse_page2(self, response, main_url, foo):
yield dict(
main_url=main_url,
other_url=response.url,
foo=foo,
)
警告
Request.cb_kwargs
在版本中引入 1.7
. 在此之前,使用 Request.meta
建议在回调时传递信息。后 1.7
, Request.cb_kwargs
成为处理用户信息的首选方式,离开 Request.meta
用于与中间件和扩展等组件通信。
使用errbacks捕获请求处理中的异常¶
请求的errback是一个函数,在处理异常时将调用该函数。
它收到一个 Failure
作为第一个参数,可用于跟踪连接建立超时、DNS错误等。
下面是一个spider示例,记录所有错误,并在需要时捕获一些特定错误:
import scrapy
from scrapy.spidermiddlewares.httperror import HttpError
from twisted.internet.error import DNSLookupError
from twisted.internet.error import TimeoutError, TCPTimedOutError
class ErrbackSpider(scrapy.Spider):
name = "errback_example"
start_urls = [
"http://www.httpbin.org/", # HTTP 200 expected
"http://www.httpbin.org/status/404", # Not found error
"http://www.httpbin.org/status/500", # server issue
"http://www.httpbin.org:12345/", # non-responding host, timeout expected
"https://example.invalid/", # DNS error expected
]
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, callback=self.parse_httpbin,
errback=self.errback_httpbin,
dont_filter=True)
def parse_httpbin(self, response):
self.logger.info('Got successful response from {}'.format(response.url))
# do something useful here...
def errback_httpbin(self, failure):
# log all failures
self.logger.error(repr(failure))
# in case you want to do something special for some errors,
# you may need the failure's type:
if failure.check(HttpError):
# these exceptions come from HttpError spider middleware
# you can get the non-200 response
response = failure.value.response
self.logger.error('HttpError on %s', response.url)
elif failure.check(DNSLookupError):
# this is the original request
request = failure.request
self.logger.error('DNSLookupError on %s', request.url)
elif failure.check(TimeoutError, TCPTimedOutError):
request = failure.request
self.logger.error('TimeoutError on %s', request.url)
访问errback函数中的其他数据¶
在处理请求失败的情况下,您可能会对访问回调函数的参数感兴趣,以便可以根据errback中的参数进一步处理。下面的示例演示如何使用 Failure.request.cb_kwargs
::
def parse(self, response):
request = scrapy.Request('http://www.example.com/index.html',
callback=self.parse_page2,
errback=self.errback_page2,
cb_kwargs=dict(main_url=response.url))
yield request
def parse_page2(self, response, main_url):
pass
def errback_page2(self, failure):
yield dict(
main_url=failure.request.cb_kwargs['main_url'],
)
请求.meta特殊键¶
这个 Request.meta
属性可以包含任意数据,但有一些特殊的键可以被scrapy及其内置扩展识别。
那些是:
ftp_password
(见FTP_PASSWORD
更多信息)ftp_user
(见FTP_USER
更多信息)
绑定地址¶
用于执行请求的传出IP地址的IP。
download_timeout¶
下载程序在超时前等待的时间(以秒计)。参见: DOWNLOAD_TIMEOUT
.
download_latency¶
自请求启动以来,获取响应所花费的时间,即通过网络发送的HTTP消息。只有在下载响应后,此元键才可用。虽然大多数其他的元键用于控制零碎的行为,但这个元键应该是只读的。
download_fail_on_dataloss¶
是否在错误的响应上失败。见: DOWNLOAD_FAIL_ON_DATALOSS
.
max_retry_times¶
使用meta key设置每个请求的重试次数。初始化时, max_retry_times
元键优先于 RETRY_TIMES
设置。
停止下载响应¶
举起一个 StopDownload
对象的处理程序引发的异常 bytes_received
或 headers_received
信号将停止下载给定响应。请参阅以下示例:
import scrapy
class StopSpider(scrapy.Spider):
name = "stop"
start_urls = ["https://docs.scrapy.org/en/latest/"]
@classmethod
def from_crawler(cls, crawler):
spider = super().from_crawler(crawler)
crawler.signals.connect(spider.on_bytes_received, signal=scrapy.signals.bytes_received)
return spider
def parse(self, response):
# 'last_chars' show that the full response was not downloaded
yield {"len": len(response.text), "last_chars": response.text[-40:]}
def on_bytes_received(self, data, request, spider):
raise scrapy.exceptions.StopDownload(fail=False)
会产生以下输出:
2020-05-19 17:26:12 [scrapy.core.engine] INFO: Spider opened
2020-05-19 17:26:12 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-05-19 17:26:13 [scrapy.core.downloader.handlers.http11] DEBUG: Download stopped for <GET https://docs.scrapy.org/en/latest/> from signal handler StopSpider.on_bytes_received
2020-05-19 17:26:13 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://docs.scrapy.org/en/latest/> (referer: None) ['download_stopped']
2020-05-19 17:26:13 [scrapy.core.scraper] DEBUG: Scraped from <200 https://docs.scrapy.org/en/latest/>
{'len': 279, 'last_chars': 'dth, initial-scale=1.0">\n \n <title>Scr'}
2020-05-19 17:26:13 [scrapy.core.engine] INFO: Closing spider (finished)
默认情况下,结果响应由相应的错误回复处理。要调用它们的回调,就像在本例中一样,传递 fail=False
到 StopDownload
例外。
请求子类¶
这是内置的列表 Request
子类。您还可以将其子类化,以实现您自己的自定义功能。
FormRequest对象¶
FormRequest类扩展了基 Request
具有处理HTML表单的功能。它使用 lxml.html forms 使用表单数据预填充表单域的步骤 Response
物体。
- class scrapy.http.request.form.FormRequest¶
- class scrapy.http.FormRequest¶
- class scrapy.FormRequest(url[, formdata, ...])¶
这个
FormRequest
类将新的关键字参数添加到__init__
方法。其余参数与Request
在这里没有记录。- 参数
formdata (dict or collections.abc.Iterable) -- 是包含HTML表单数据的字典(或可为(键、值)元组),这些数据将被URL编码并分配给请求主体。
这个
FormRequest
除了标准之外,对象还支持以下类方法Request
方法:- classmethod FormRequest.from_response(response[, formname=None, formid=None, formnumber=0, formdata=None, formxpath=None, formcss=None, clickdata=None, dont_click=False, ...])¶
返回新的
FormRequest
对象,其表单字段值预填充在HTML中<form>
包含在给定响应中的元素。有关示例,请参见 使用formRequest.from_response()模拟用户登录 .默认情况下,策略是在任何看起来可单击的窗体控件上自动模拟单击,如
<input type="submit">
. 尽管这非常方便,而且常常是所需的行为,但有时它可能会导致难以调试的问题。例如,当处理使用javascript填充和/或提交的表单时,默认from_response()
行为可能不是最合适的。要禁用此行为,可以设置dont_click
参数True
. 此外,如果要更改单击的控件(而不是禁用它),还可以使用clickdata
参数。警告
对于选项值中有前导空格或尾随空格的select元素,使用此方法将不起作用,因为 bug in lxml ,应在LXML 3.8及更高版本中修复。
- 参数
response (
Response
object) -- 包含用于预填充表单字段的HTML表单的响应formname (str) -- 如果给定,将使用名称属性设置为该值的表单。
formid (str) -- 如果给定,将使用ID属性设置为该值的表单。
formxpath (str) -- 如果给定,将使用与xpath匹配的第一个表单。
formcss (str) -- 如果给定,将使用与CSS选择器匹配的第一个表单。
formnumber (int) -- 当响应包含多个表单时要使用的表单数。第一个(也是默认值)是
0
.formdata (dict) -- 要在表单数据中重写的字段。如果响应中已存在字段
<form>
元素,其值将被此参数中传递的值重写。如果此参数中传递的值是None
,即使响应中存在该字段,该字段也不会包含在请求中。<form>
元素。clickdata (dict) -- 用于查找单击的控件的属性。如果没有给出,将提交表单数据,模拟单击第一个可单击元素。除了HTML属性之外,控件还可以通过其相对于表单内其他可提交输入的基于零的索引进行标识,方法是
nr
属性。dont_click (bool) -- 如果为真,则表单数据将在不单击任何元素的情况下提交。
该类方法的其他参数直接传递给
FormRequest
__init__
方法。
请求使用示例¶
使用FormRequest通过HTTP Post发送数据¶
如果您想在spider中模拟HTML表单发布并发送几个键值字段,可以返回 FormRequest
像这样的物体:
return [FormRequest(url="http://www.example.com/post/action",
formdata={'name': 'John Doe', 'age': '27'},
callback=self.after_post)]
使用formRequest.from_response()模拟用户登录¶
网站通常通过 <input type="hidden">
元素,例如与会话相关的数据或身份验证令牌(用于登录页)。当进行抓取时,您将希望这些字段自动预填充,并且只覆盖其中的几个字段,例如用户名和密码。你可以使用 FormRequest.from_response()
此作业的方法。下面是一个蜘蛛的例子,它使用它:
import scrapy
def authentication_failed(response):
# TODO: Check the contents of the response and return True if it failed
# or False if it succeeded.
pass
class LoginSpider(scrapy.Spider):
name = 'example.com'
start_urls = ['http://www.example.com/users/login.php']
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata={'username': 'john', 'password': 'secret'},
callback=self.after_login
)
def after_login(self, response):
if authentication_failed(response):
self.logger.error("Login failed")
return
# continue scraping with authenticated session...
JsonRequest¶
JsonRequest类扩展了 Request
类,具有处理JSON请求的功能。
- class scrapy.http.JsonRequest(url[, ... data, dumps_kwargs])[源代码]¶
这个
JsonRequest
类将两个新的关键字参数添加到__init__
方法。其余参数与Request
在这里没有记录。使用
JsonRequest
将设置Content-Type
报头到application/json
和Accept
报头到application/json, text/javascript, */*; q=0.01
- 参数
data (object) -- 是需要对JSON编码并分配给主体的任何JSON可序列化对象。如果
Request.body
提供了参数。此参数将被忽略。如果Request.body
未提供参数,并且提供了数据参数Request.method
将被设置为'POST'
自动地。dumps_kwargs (dict) -- 将传递给基础的参数
json.dumps()
方法,用于将数据序列化为JSON格式。
- attributes: Tuple[str, ...] = ('url', 'callback', 'method', 'headers', 'body', 'cookies', 'meta', 'encoding', 'priority', 'dont_filter', 'errback', 'flags', 'cb_kwargs', 'dumps_kwargs')¶
的元组
str
对象,这些对象包含类的所有公共属性的名称,这些属性也是__init__
方法。当前由以下人员使用
Request.replace()
,Request.to_dict()
和request_from_dict()
。
JsonRequest用法示例¶
使用JSON负载发送JSON POST请求:
data = {
'name1': 'value1',
'name2': 'value2',
}
yield JsonRequest(url='http://www.example.com/post/action', data=data)
响应对象¶
- class scrapy.http.Response(*args, **kwargs)[源代码]¶
表示HTTP响应的对象,通常下载(由Downloader)并提供给爬行器进行处理。
- 参数
url (str) -- 此响应的URL
status (int) -- 响应的HTTP状态。默认为
200
.headers (dict) -- 此响应的头。dict值可以是字符串(对于单值头)或列表(对于多值头)。
body (bytes) -- 反应机构。要以字符串形式访问解码文本,请使用
response.text
从编码感知 Response subclass ,如TextResponse
.flags (list) -- 是一个列表,其中包含
Response.flags
属性。如果给定,则将浅复制列表。request (scrapy.Request) -- 的初始值
Response.request
属性。这代表Request
产生了这个响应。certificate (twisted.internet.ssl.Certificate) -- 表示服务器的SSL证书的对象。
ip_address (
ipaddress.IPv4Address
oripaddress.IPv6Address
) -- 从哪个服务器发出响应的IP地址。protocol (
str
) -- 用于下载响应的协议。例如:“HTTP/1.0”、“HTTP/1.1”、“H2”
2.0.0 新版功能: 这个
certificate
参数。2.1.0 新版功能: 这个
ip_address
参数。2.5.0 新版功能: 这个
protocol
参数。- status¶
表示响应的HTTP状态的整数。例子:
200
,404
.
- headers¶
包含响应头的类似字典的对象。可以使用访问值
get()
返回具有指定名称的第一个头值,或getlist()
返回具有指定名称的所有头值。例如,此调用将为您提供标题中的所有cookie::response.headers.getlist('Set-Cookie')
- body¶
作为正文响应字节。
如果你想把身体作为一个字符串,使用
TextResponse.text
(仅在TextResponse
和子类)。此属性是只读的。要更改响应主体,请使用
replace()
.
- request¶
这个
Request
生成此响应的对象。在响应和请求通过所有 Downloader Middlewares . 特别是,这意味着:HTTP重定向将导致将原始请求(重定向前的URL)分配给重定向响应(重定向后的最终URL)。
response.request.url并不总是等于response.url
此属性仅在spider代码和 Spider Middlewares ,但在下载器中间软件(尽管您通过其他方式有可用的请求)和
response_downloaded
信号。
- meta¶
到的快捷方式
Request.meta
的属性Response.request
对象(即。self.request.meta
)不像
Response.request
属性Response.meta
属性是沿着重定向和重试传播的,因此您将获得原始的Request.meta
从你的蜘蛛那里送来的。参见
Request.meta
属性
- cb_kwargs¶
2.0 新版功能.
到的快捷方式
Request.cb_kwargs
的属性Response.request
对象(即。self.request.cb_kwargs
)不像
Response.request
属性Response.cb_kwargs
属性是沿着重定向和重试传播的,因此您将获得原始的Request.cb_kwargs
从你的蜘蛛那里送来的。参见
- flags¶
包含此响应标志的列表。标记是用于标记响应的标签。例如:
'cached'
,'redirected
'等,它们显示在响应的字符串表示形式上 (__str__ 方法)由引擎用于日志记录。
- certificate¶
2.0.0 新版功能.
A
twisted.internet.ssl.Certificate
表示服务器的SSL证书的。仅为填充
https
响应,None
否则。
- ip_address¶
2.1.0 新版功能.
从哪个服务器发出响应的IP地址。
该属性目前只由http1.1下载处理程序填充,即
http(s)
响应。对于其他处理程序,ip_address
总是None
.
- protocol¶
2.5.0 新版功能.
用于下载响应的协议。例如:“HTTP/1.0”、“HTTP/1.1”
此属性当前仅由HTTP下载处理程序填充,即
http(s)
回应。对于其他处理程序,protocol
总是None
。
- attributes: Tuple[str, ...] = ('url', 'status', 'headers', 'body', 'flags', 'request', 'certificate', 'ip_address', 'protocol')¶
的元组
str
对象,这些对象包含类的所有公共属性的名称,这些属性也是__init__
方法。当前由以下人员使用
Response.replace()
。
- replace([url, status, headers, body, request, flags, cls])[源代码]¶
返回具有相同成员的响应对象,除了那些通过指定的关键字参数赋予新值的成员。属性
Response.meta
默认情况下是复制的。
- urljoin(url)[源代码]¶
通过组合响应的
url
有一个可能的相对URL。这是包装纸
urljoin()
,这仅仅是进行此呼叫的别名:urllib.parse.urljoin(response.url, url)
- follow(url, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding='utf-8', priority=0, dont_filter=False, errback=None, cb_kwargs=None, flags=None)[源代码]¶
返回A
Request
要跟踪链接的实例url
. 它接受与Request.__init__
方法,但url
可以是相对URL或scrapy.link.Link
对象,而不仅仅是绝对URL。TextResponse
提供了一个follow()
方法,它除了支持绝对/相对URL和链接对象之外还支持选择器。2.0 新版功能: 这个 旗帜 参数。
- follow_all(urls, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding='utf-8', priority=0, dont_filter=False, errback=None, cb_kwargs=None, flags=None)[源代码]¶
2.0 新版功能.
返回iterable of
Request
跟踪所有链接的实例urls
. 它接受与Request.__init__
方法,但元素urls
可以是相对URL或Link
对象,而不仅仅是绝对URL。TextResponse
提供了一个follow_all()
方法,它除了支持绝对/相对URL和链接对象之外还支持选择器。
响应子类¶
下面是可用的内置响应子类的列表。您还可以对响应类进行子类化,以实现您自己的功能。
文本响应对象¶
- class scrapy.http.TextResponse(url[, encoding[, ...]])[源代码]¶
TextResponse
对象将编码功能添加到基Response
类,它只用于二进制数据,如图像、声音或任何媒体文件。TextResponse
对象支持新的__init__
方法参数,以及基Response
物体。其余功能与Response
类,此处未记录。- 参数
encoding (str) -- 包含用于此响应的编码的字符串。如果创建一个
TextResponse
对象,它将转换为使用此编码编码的字节。如果 编码 是None
(默认),将在响应头和正文中查找编码。
TextResponse
除了标准之外,对象还支持以下属性Response
一:- text¶
响应体,作为字符串。
一样
response.body.decode(response.encoding)
,但结果在第一次调用后缓存,因此您可以访问response.text
多次无额外开销。注解
str(response.body)
不是将响应正文转换为字符串的正确方法:>>> str(b'body') "b'body'"
- encoding¶
带有此响应编码的字符串。按顺序尝试以下机制来解决编码问题:
传入的编码
__init__
方法encoding
参数在内容类型HTTP标头中声明的编码。如果此编码无效(即未知),则忽略它并尝试下一个解析机制。
响应正文中声明的编码。TextResponse类不为此提供任何特殊功能。然而,
HtmlResponse
和XmlResponse
上课。通过查看响应主体推断出的编码。这是更脆弱的方法,也是最后一个尝试的方法。
- selector¶
A
Selector
实例使用响应作为目标。选择器在第一次访问时延迟实例化。
- attributes: Tuple[str, ...] = ('url', 'status', 'headers', 'body', 'flags', 'request', 'certificate', 'ip_address', 'protocol', 'encoding')¶
的元组
str
对象,这些对象包含类的所有公共属性的名称,这些属性也是__init__
方法。当前由以下人员使用
Response.replace()
。
TextResponse
对象除了支持标准之外还支持以下方法Response
一:- follow(url, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding=None, priority=0, dont_filter=False, errback=None, cb_kwargs=None, flags=None)[源代码]¶
返回A
Request
要跟踪链接的实例url
. 它接受与Request.__init__
方法,但url
不仅可以是绝对URL,而且可以是相对URL
一
Selector
对象<link>
或<a>
元素,例如response.css('a.my_link')[0]
属性
Selector
(不是选择器列表),例如。response.css('a::attr(href)')[0]
或response.xpath('//img/@src')[0]
见 创建请求的快捷方式 用于示例。
- follow_all(urls=None, callback=None, method='GET', headers=None, body=None, cookies=None, meta=None, encoding=None, priority=0, dont_filter=False, errback=None, cb_kwargs=None, flags=None, css=None, xpath=None)[源代码]¶
产生
Request
跟踪所有链接的实例urls
. 它接受与Request
的__init__
方法,除了urls
元素不需要是绝对URL,它可以是以下任何一个:相对URL
一
Selector
对象<link>
或<a>
元素,例如response.css('a.my_link')[0]
属性
Selector
(不是选择器列表),例如。response.css('a::attr(href)')[0]
或response.xpath('//img/@src')[0]
此外,
css
和xpath
参数可用于在中执行链接提取follow_all
方法(只有一个urls
,css
和xpath
接受)。注意,当经过
SelectorList
作为urls
参数或使用css
或xpath
参数时,此方法不会为无法从中获取链接的选择器生成请求(例如,没有href
属性)
HTMLResponse对象¶
- class scrapy.http.HtmlResponse(url[, ...])[源代码]¶
这个
HtmlResponse
类是的子类TextResponse
它通过查看HTML添加了编码自动发现支持 meta http-equiv 属性。见TextResponse.encoding
.
XmlResponse对象¶
- class scrapy.http.XmlResponse(url[, ...])[源代码]¶
这个
XmlResponse
类是的子类TextResponse
它通过查看XML声明行添加了编码自动发现支持。见TextResponse.encoding
.