zoukankan      html  css  js  c++  java
  • 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,方便进行访问,获取信息。

  • 相关阅读:
    【构建工具】《Maven实战》读书笔记
    【网络安全】Dos攻击科普文
    谈谈集合.CopyOnWriteArrayList
    谈谈集合.List
    小程序开发--移动端分辨率与rpx
    跟面向对象卯上了,看看ES6的“类”
    捋一捋js面向对象的继承问题
    Canvas的drawImage方法使用
    浏览器内核趣对话
    “茴”字有四种写法,this也是一样
  • 原文地址:https://www.cnblogs.com/cheflone/p/13703670.html
Copyright © 2011-2022 走看看