请教使用 Python 爬虫获取 Cookie 的问题 - 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
mathor

请教使用 Python 爬虫获取 Cookie 的问题

  •  1
     
  •   mathor Oct 22, 2023 2271 views
    This topic created in 933 days ago, the information mentioned may be changed or developed.
    有个登录页面,网址是 http://aaaaa.com/login.jsp ,打开 f12 看到 Network 里 Cookie 当中有这么一个参数“JSESSIONID”,无论我如何刷新页面( F5 或者是 ctrl+F5 ),这个 JSESSIONID 都不会变。我输入用户名密码进行登录以后(没有验证码,只需要输入用户名密码,点击登录按钮),进入主页再看 Network ,这个 Cookie 里 JSESSIONID 的值还是没变过。

    问题来了,我用 python
    ```python
    session = requests.session()
    params = {'username': xxx, 'password': xxx}
    response1 = session.get(login_url, data=params)
    response2 = session.get(login_url, data=params)
    ```
    然后我分别打印了`response1`和`response2`的 cookie 看了一下里面的 JSESSIONID 的值,居然完全不一样,难道不应该同一个会话的 JSESSIONID 是一样的吗?

    另外还有一个问题就是,我获取 cookie ,然后传给下面的代码
    ```python
    headers = {'cookie': cookie, 'User-Agent': xxxxx, 'Host': xxxx,.....}
    respOnse= session.post(url, headers=headers)
    print(response.text)
    ```
    如果登录成功,这个 cookie 值是有效的,那么需要登录能访问的 url ,response.text 打印出来应该是网页的内容,可是并不是,打印的结果一看就是没登录成功,很费解

    ps: 环境所限,不太能使用 seleinum 这样的自动化库,只能使用爬虫。请各位大佬帮忙参谋参谋是哪儿出了问题,感谢
    9 replies    2023-10-26 18:00:35 +08:00
    yumusb
        1
    yumusb  
       Oct 22, 2023
    建议发具体的看看
    mathor
        2
    mathor  
    OP
       Oct 22, 2023
    @yumusb sorry ,我现在不在办公室,这个网站是公司内网,因此没法发截图之类更详细的内容
    julyclyde
        3
    julyclyde  
       Oct 22, 2023
    你用浏览器对比的是:登录前、登录后
    你用 requests 对比的是:第一次登录后、第一次还没退出就执行第二次登录后
    这俩事件并不一样啊,你为什么会期望他们的 JSESSIONID 相同呢?

    第二个问题,建议你打一下 status 看看。也许是个跳转?
    jeeyong
        4
    jeeyong  
       Oct 23, 2023
    1. 先访问页面, res = requests.get...
    2. cookies = res.cookies
    3. requests.get(cookies=cookies)

    这么试试呢?
    julyclyde
        5
    julyclyde  
       Oct 23, 2023
    @jeeyong 他已经用了 session 了
    1018ji
        6
    1018ji  
       Oct 23, 2023
    JSESSIONID 就是登录生成的呗,先拿浏览器登录的 cookie 测试 2 看成功吗
    DOGSO
        7
    DOGSO  
       Oct 23, 2023
    有没有一种可能,这个 JSESSIONID 与你发起的 session 是无关的,只和 login 相关,是无状态的
    fbichijing
        8
    fbichijing  
       Oct 24, 2023
    难道不是应该先抓下包吗?
    Maerd
        9
    Maerd  
       Oct 26, 2023
    requests 的 session ,作用是帮你维护一个连接池,请求同一个域的时候会复用 tcp 连接,此外就是会保留设置好的 headers 和 cookie 。http 协议是由请求和响应组成的,而 response 的 cookie ,是你接收到的 http 响应的 headers 的 set-cookie 字段,既然你登陆了两次,这个又怎么会返回一样的值呢?这个和语言无关,题主可以进一步熟悉一下 http 协议
    About     Help     Advertise     Blog     API     FAQ     Solana     3715 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 04:28 PVG 12:28 LAX 21:28 JFK 00:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86