• scrapy的post简单请求


    1.

    重写start_requests(self) 方法

    2.start_requests(self)的返回值

    yield scrapy.FormRequest(url=url,
                                     callback=self.parse_post,
                                     formdata=data, )

    url:请求的post地址

    callback:回调函数

    headers:可以定制头信息(setting也可以)

    formdata:post携带的数据,是一个字典

    2.1如果是表单登陆,scrapy在Fromrequest基础上还提供了简便方法

    data={'login':'name','password':'content'}
    
    yield scrapy.FormRequest.from_response(
                                     response,
    formname=xxx,
    formid=xxx,
    formnumber=xxx,
    formxpath=xxx, callback=self.parse_post, formdata=data, )
    spider最好请求的是干净的login页面,如果存在多个表单
    可以利用一下四个参数来定位你需要的form表单
    formname,
    formid,
    formnumber,
    formxpath,

    重要返回值:

    resposne:自动从response里寻找from表单
    formdata:只需要提交网页表单里的需求值即可

    附:scrapy是非常强大的,post请求后,就直接自动保存了cookie。

    setting.py
    # Disable cookies (enabled by default)
    # COOKIES_ENABLED = False
    默认开启

    可以应用于一下场景:

    1.cookie过期时间很长,常见于一些不规范网站

    2.能在cookie过期之前把所有的数据拿到

    3.配合其他程序使用,例如先使用selenium登陆之后的cookie保存到本地,scrapy发送请求之前先读取本地cookies。

    当然,如果你不想post就携带cookie在scrapy里也是可以的。

    1.直接请求需要cookie信息的url

    2.重写start_requests(self),迭代器返回值加上cookie

    1     def start_requests(self):
    2        cookies=dict(a='content',b='content')
    3         yield scrapy.Request(url=self.start_1, 
    4 cookies=cookie  #cookie是一个字典
    5 callback=self.parse_save)

     然后在start_1里也可以直接成功回调函数请求需要登录的url

     注意:这里的cookie如果放在返回值的headers里是不会起效果的,scrapy只会从cookies参数里读取

    总而言之,不论是上诉方式还是创建session的方式,都是为了携带cookie,方便进行访问,获取信息。

  • 相关阅读:
    IISManager 的启动
    基于hadoop集群的hive 安装(mysql,derby)
    Struts中央控制器
    在Spring中配置Hibernate事务
    java 实现多线程下载
    hello,博客园
    easyui datagrid中添加右键菜单事件
    C#项目打包
    easyui datagrid中单击添加菜单事件
    SQL多条件查询拼接in中条件方法
  • 原文地址:https://www.cnblogs.com/cheflone/p/13703670.html
Copyright © 2020-2023  润新知