笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

请求和响应

发布者: 笨鸟自学网



请求使用示例

使用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请求的功能。

classscrapy.http.JsonRequest(url[... datadumps_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) 

上一篇:Feed 导出下一篇:链接提取器

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 09:53 , Processed in 0.025174 second(s), 17 queries .

© 2001-2020

返回顶部