class scrapy.http.Request(url[, callback, method = 'GET', headers, body, cookies, meta, encoding = 'utf-8', priority = 0, dont_filter = false, errback])
参数和说明 |
url
这是一个指定 URL 请求的字符串。
|
callback
这是一个可调用的函数,它使用请求的响应作为第一个参数。
|
method
是指定HTTP方法请求的字符串。
|
headers
这是一个带有请求头的字典。
|
body
它是有请求体的字符串或unicode。
|
cookies
这是一个包含请求cookies的列表。
|
meta
它是一个包含请求元数据值的字典。
|
encoding
是一个包含utf-8编码的字符串,用于对URL进行编码。
|
priority
它是一个整数,调度器使用优先级来定义处理请求的顺序。
|
dont_filter
它是一个布尔值,指定调度程序不应过滤请求。
|
errback
这是一个可调用的函数,在处理请求时出现异常时调用。
|
def parse_page1(self, response): return scrapy.Request("http://www.something.com/some_page.html", callback = self.parse_page2) def parse_page2(self, response): self.logger.info("%s page visited", response.url)
def parse_page1(self, response): item = DemoItem() item['foremost_link'] = response.url request = scrapy.Request("http://www.something.com/some_page.html", callback = self.parse_page2) request.meta['item'] = item return request def parse_page2(self, response): item = response.meta['item'] item['other_link'] = response.url return item
import scrapy from scrapy.spidermiddlewares.httperror import HttpError from twisted.internet.error import DNSLookupError from twisted.internet.error import TimeoutError, TCPTimedOutError class DemoSpider(scrapy.Spider): name = "demo" start_urls = [ "http://www.httpbin.org/", # HTTP 200 expected "http://www.httpbin.org/status/404", # Webpage not found "http://www.httpbin.org/status/500", # Internal server error "http://www.httpbin.org:12345/", # timeout expected "http://www.httphttpbinbin.org/", # 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('Recieved response from {}'.format(response.url)) # ... def errback_httpbin(self, failure): # logs failures self.logger.error(repr(failure)) if failure.check(HttpError): response = failure.value.response self.logger.error("HttpError occurred on %s", response.url) elif failure.check(DNSLookupError): request = failure.request self.logger.error("DNSLookupError occurred on %s", request.url) elif failure.check(TimeoutError, TCPTimedOutError): request = failure.request self.logger.error("TimeoutError occurred on %s", request.url)
键和说明 |
dont_redirect
当设置为true时是一个键,不会根据响应的状态重定向请求。
|
dont_retry
设置为true时是一个键,不会重试失败的请求,中间件会忽略。
|
handle_httpstatus_list
它是一个键,用于定义每个请求的响应代码可以被允许。
|
handle_httpstatus_all
它是一个键,用于通过将其设置为
true 来允许请求的任何响应代码。
|
dont_merge_cookies
这是一个用于避免与现有 cookie 合并的键,通过将其设置为
true。
|
cookiejar
它是一个用于保持每个爬虫的多个cookie会话的密钥。
|
dont_cache
它是用于避免缓存每个策略上的 HTTP 请求和响应的键。
|
redirect_urls
它是一个包含请求通过的 URL 的键。
|
bindaddress
可以用来执行请求的传出IP地址的IP。
|
dont_obey_robotstxt
当设置为 true 时,它是一个键,不会过滤 robots.txt 排除标准禁止的请求,即使启用了 ROBOTSTXT_OBEY。
|
download_timeout
它用于设置每个爬虫的超时(以秒为单位),下载器将在超时之前等待。
|
download_maxsize
用于设置下载器将下载的每个爬虫的最大大小(以字节为单位)。
|
proxy
可以为Request对象设置Proxy,为请求的使用设置HTTP代理。
|
class scrapy.http.FormRequest(url[,formdata, callback, method = 'GET', headers, body, cookies, meta, encoding = 'utf-8', priority = 0, dont_filter = false, errback])
classmethod from_response(response[, formname = None, formnumber = 0, formdata = None,
formxpath = None, formcss = None, clickdata = None, dont_click = false, ...])
参数和说明 |
response
它是一个对象,用于使用 HTML 响应形式预先填充表单字段。
|
formname
如果指定,将使用具有名称属性的表单的字符串。
|
formnumber
当响应中有多个表单时使用的表单整数。
|
formdata
它是用于覆盖的表单数据中字段的字典。
|
formxpath
指定时为字符串,使用与xpath匹配的形式。
|
formcss
指定时为字符串,使用与css选择器匹配的表单。
|
clickdata
是用来观察被点击控件的属性字典。
|
dont_click
当设置为 true 时,表单中的数据将在不点击任何元素的情况下提交。
|
return [FormRequest(url = "http://www.something.com/post/action", formdata = {'firstname': 'John', 'lastname': 'dave'}, callback = self.after_post)]
import scrapy class DemoSpider(scrapy.Spider): name = 'demo' start_urls = ['http://www.something.com/users/login.php'] def parse(self, response): return scrapy.FormRequest.from_response( response, formdata = {'username': 'admin', 'password': 'confidential'}, callback = self.after_login ) def after_login(self, response): if "authentication failed" in response.body: self.logger.error("Login failed") return # You can continue scraping here
class scrapy.http.Response(url[, status = 200, headers, body, flags])
参数和说明 |
url
是指定URL响应的字符串。
|
status
它是一个包含HTTP状态响应的整数。
|
headers
这是一个包含响应头的字典。
|
body
这是一个带有响应体的字符串。
|
flags
这是一个包含响应标志的列表。
|
class scrapy.http.TextResponse(url[, encoding[,status = 200, headers, body, flags]])
属性和描述 |
text
它是一个响应体,其中 response.text 可以被多次访问。
|
encoding
这是一个包含响应编码的字符串。
|
selector
它是在第一次访问时实例化的属性,并使用响应作为目标。
|
方法和说明 |
xpath (query)
它是TextResponse.selector.xpath(query)的快捷方式。
|
css (query)
它是TextResponse.selector.css(query)的快捷方式。
|
body_as_unicode()
它是一个可以作为方法使用的响应体,其中 response.text 可以被多次访问。
|
class scrapy.http.HtmlResponse(url[,status = 200, headers, body, flags])
class scrapy.http.XmlResponse(url[, status = 200, headers, body, flags])