V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
braineo
V2EX  ›  Python

请教 Python 爬虫模拟 Login 时的错误排查

  •  
  •   braineo · 2016-01-04 13:43:04 +08:00 · 2790 次点击
    这是一个创建于 3224 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在试着爬银行帐单的网页,需要 Login

    Login 是一个 AJAX 的 POST ,在用 Chrome 抓包分析了 Header 跟 Payload 之后,用 POSTMAN 验证了

    header 需要
    X-Requested-With
    User-Agent
    Content-Type

    Payload 需要
    requestTimestamp
    user
    password

    用 POSTMAN 加上以上字段进行试验,可以得到 200 的返回,一切正常

    后用 Python 的 Requests 库写了一个爬虫 用了 Session

    s = requests.Session()
    r = session.post(login_url, params=login_payload, headers=login_header, allow_redirects=True)

    login_payload 和 login_header 里的数据与 POSTMAN 里用的一样,但是却是 500 的返回

    想请教一下排查思路,如果做法有误也请不吝指出
    9 条回复    2016-01-04 21:54:37 +08:00
    Strikeactor
        1
    Strikeactor  
       2016-01-04 13:47:51 +08:00   ❤️ 1
    shidenggui
        2
    shidenggui  
       2016-01-04 13:54:29 +08:00   ❤️ 1
    用 OrderedDict 指定下参数顺序看下,有些网站会检查这个,不过概率很低。
    最好你打下 requests 的 log 跟你发送的对比下看看
    Caratpine
        3
    Caratpine  
       2016-01-04 14:02:20 +08:00   ❤️ 1
    有可能是 login 这个请求之前,网站加载了另外一些请求,这些请求当中有可能 set 了一些必要的 cookie
    braineo
        4
    braineo  
    OP
       2016-01-04 14:28:19 +08:00
    @Strikeactor 好工具
    braineo
        5
    braineo  
    OP
       2016-01-04 14:28:50 +08:00
    @shidenggui 下班回去试试
    braineo
        6
    braineo  
    OP
       2016-01-04 14:29:45 +08:00
    @Caratpine 原来如此,还有这种可能。这是一种防爬的机制么?
    Caratpine
        7
    Caratpine  
       2016-01-04 14:40:39 +08:00
    @braineo 我觉得算是一种吧,我之前也抓过一个网站,在加载一个 js 文件的时候 set 了一个必要的 cookie ,我之前用的验证工具如果不清理本地 cookie 的话,即使你模拟的 header 里面没有加 cookie ,这个工具也会在模拟的时候读取你的本地 cookie ,比较坑爹,所以我觉得你这种情况和我之前遇到的问题很类似。
    dapang1221
        8
    dapang1221  
       2016-01-04 14:59:20 +08:00 via Android   ❤️ 1
    直接抓爬虫的流量,和正常访问比较一下
    braineo
        9
    braineo  
    OP
       2016-01-04 21:54:37 +08:00
    @Caratpine 就是这个 cookies 的问题啊……坑死人了,用 POSTMAN 的时候会从浏览器里抽 Cookies 但是自己模拟的话就缺了这个,现在好了 200 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2152 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:20 · PVG 08:20 · LAX 17:20 · JFK 20:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.