pyspider cookies问题,用requests设置cookies成功登录微博但在pyspider中失败

新手上路,请多包涵
from pyspider.libs.base_handler import *


class Handler(BaseHandler):
    user_url = "http://weibo.cn/"

    crawl_config = {
        'itag': 'v1',

        'headers': {
            'User-Agent':'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
            "Host": "weibo.cn",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "zh-CN,zh-TW;q=0.8,zh-HK;q=0.6,en-US;q=0.4,en;q=0.2",
            "Accept-Encoding": "gzip, deflate",
            "DNT": "1",
            "Connection": "keep-alive"
        },
        'cookies':{
        "_T_WM":"791e0d5962c38c757bead1a106a4dcc5",
        " ALF":"1489404939",
        " SCF":"AmNkSminRmi2L6WiP0tbn2H_p-TOZQIRRTLwEL5OhwHOohm56wHRk_9Jy1w7iXftduUAJihNuU3B-8cYnWBT3Lk.",
        " SUB":"_2A251modoDeRxGeNG7VEV9ibIyT6IHXVXZCkgrDV6PUJbktBeLXXZkW2HyTgXsruSYnviSU7hXUjfdGTOig..",
        " SUBP":"0033WrSXqPxfM725Ws9jqgMF55529P9D9W5wqBjzJ2m1XohsTfpMwPVx5JpX5o2p5NHD95Qf1hq0ShqRShzEWs4Dqcjci--fi-i8iK.7i--fi-2Xi-2Ni--fi-2Xi-2Ni--fi-2Xi-2Ni--fi-2Xi-2Ni--fi-zRiKnf",
        " SUHB":"0tKqtAdy5rivMy",
        " SSOLoginState":"1486812984"
    }
    }


    @every(minutes=60*24 * 60)
    def on_start(self):
        self.crawl(Handler.user_url, callback=self.index_page,method="GET")


    @config(age=1 * 24 * 60 * 60)
    def index_page(self, response):
        print(response.text)

用requests可以实现登录效果,但是用pyspider是一直访问的是默认的未登录的网页

在crawl_config 和在self.crawl 中设置cookies都不行

阅读 6.6k
3 个回答

建议你用selenium来做, 微博的登入好像要走一遍它的js,反正怎么验证登入的我是没看懂

pyspider 是在同一台机器上运行吗?
我不确定 cookie 前带空格有什么不同,分别用 pyspider 和 requests 发送请求到 http://httpbin.org/get 看看请求有什么不同

另外: 0.3.8 版本在调试时,crawl_config 不生效。

  • 确保PySpider的版本是0.3.8之后的

    • 如作者足兆叉虫所说,旧版本0.3.8调试时crawl_config 不生效
    • 做法:

      • 比如我此处用的是pipenv,则可以:
      • pipenv graph会输出pyspider==0.3.10 -> 就确保了是新版本:0.3.10
  • 建议把你crawl_config.cookies中的各个key的名字前面的空格去掉

    • 个人目前很少(没)见过cookie的key前面带空格的
    • 具体做法:

      • " ALF" -> "ALF"
      • 以此类推
  • 确保requests内部用的cookie和你此处PySpider所用的是完全一致的

    • 可以去requests中打印出相关所有的cookie值
  • 防止由于代码没运行,导致没登录

    • PySpider调试期间,把@every(minutes=60*24 * 60)@config(age=1 * 24 * 60 * 60)试试效果
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题