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,方便进行访问,获取信息。

  • 相关阅读:
    以淘宝商品搜索漫谈查询条件的排序对效率的影响(SQL查询性能优化,附调优(性能诊断)DMV)
    监测ASP.NET MVC网站
    在WCF中使用Ninject轻量级IOC框架 之 SOAP风格服务
    敏捷——SCRUM
    《scrum敏捷软件开发》读书笔记
    【双旦献礼】PortalBasic Java Web 应用开发框架 v3.0.1 正式发布(源码、示例及文档)
    前端架构
    Android源码学习之如何使用eclipse+NDK
    mass Framework attr模块 v3
    【转】iOS 6版本与之前版本差异总结
  • 原文地址:https://www.cnblogs.com/cheflone/p/13703670.html
Copyright © 2011-2022 走看看