【问题标题】:Using python to scrape a site (no form, session cookies)使用 python 抓取网站(无表单,会话 cookie)
【发布时间】:2019-09-27 16:49:31
【问题描述】:

我正在尝试抓取我拥有合法登录名的网站。当您尝试访问此站点时,您会被重定向到 Verify.aspx,直到您输入 access-code 的合法值。使用 Python 的 requests 库,我尝试了以下方法:

url1 = "<url>/Verify.aspx"
payload = {"access-code": "xxxxxxxx" }
ses = requests.Session()
r = requests.get(url1, data=payload)

当我查看值或r.cookies 时,我发现我抓到了一堆 cookie,存储在一个 cookie jar 中:

<RequestsCookieJar[Cookie(version=0, name='ASP.NET_SessionId', value='...)]>

此时,我想保留会话信息,并将其包含在未来的请求中。例如下面,我想浏览一个普通页面(即home),所以我尝试访问该页面,并尝试将cookies一起发送。

test = ses.post('<url>/home', cookies= r.cookies)

但是,在这个阶段,当我在 python 中查看test.text 时,我可以从代码中看到我刚刚被重定向回原来的Verify.aspx 页面。

我已经进行了大量的谷歌搜索,但没有成功。我对 Python 有一定的了解,但对抓取却一无所知。我实际上更喜欢 R 解决方案,因为我更喜欢它,但在我看来,Python 抓取库比 R 包更好。我不想使用 Selenium 之类的东西,除非它是通过 Python 或 R,因为我想在没有任何用户交互的情况下提取和处理数据。

我感觉卡住了 - 我知道我正在传递合法代码,并且由于我可以通过普通网页正常登录,因此我正在获取有效的会话 cookie。我只是不知道如何在随后的 URL 调用期间捕获、保存会话 cookie 信息并将其传递回页面。

我读过的所有内容都表明requests 库应该处理有关 cookie 的所有内容,但我认为我只是错误地传递了它。

有人可以建议我下一步可以尝试什么吗?

#

编辑 感谢您的关注,@Faboor。我认为我在一个更好的轨道上,因为我现在有一个不同的错误信息。现在,当我查看print(test.text) 的内容时,它显示“您的浏览器发送了此服务器无法理解的请求。”。我尝试访问的第二个 URL 不是离散页面(即它看起来像一个文件夹,而不是 index.html 之类的东西)可以吗?

【问题讨论】:

    标签: python python-requests session-cookies


    【解决方案1】:

    在您的示例中,您创建了一个会话,但不使用它来登录。假设这只是一个 cookie 操作问题,使用 ses.getses.post 而不是 requests.get 应该可以解决您的问题。

    url1 = "<url>/Verify.aspx"
    payload = {"access-code": "xxxxxxxx" }
    ses = requests.Session()
    r = ses.get(url1, data=payload)
    test = ses.post('<url>/home')
    

    您可以使用ses.cookies 查看会话中存储了哪些 cookie。或者为了更好的可读性(虽然丢失了一些关于 cookie 来源的信息),你可以使用dict(ses.cookies)

    有关请求会话的更多信息,check out the advanced usage docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-25
      • 2020-09-28
      • 2014-02-12
      • 1970-01-01
      • 2013-09-24
      • 2011-01-01
      • 2021-05-22
      • 2016-05-27
      相关资源
      最近更新 更多