【问题标题】:Getting a URL with an authenticity token using python使用 python 获取带有真实性令牌的 URL
【发布时间】:2021-11-03 14:10:21
【问题描述】:

我正在尝试使用 python 中的获取请求来读取网页。 原始 URL 为 given here。我发现我感兴趣的信息在一个带有this URL的子页面中(我将真实性令牌替换为XXX)。

我尝试在脚本中使用第二个 URL,但出现 406 错误。你能建议我做错了什么吗?是防止刮擦的真实性令牌吗?如果是这样,我可以解决它吗?

import urllib.request

url = ...
agent={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3'}
req = urllib.request.Request(url,headers=agent)
data = urllib.request.urlopen(req)

谢谢!

PS,这是我使用 Chrome 获取 URL 的方式:

首先我浏览到https://www.goodreads.com/book/show/385228.On_Liberty

然后我打开 Chrome 的开发者工具:三个点 -> 更多工具 -> 开发者工具。选择网络标签。

然后我转到页面底部(就在最后一次审查之后)并点击“下一步”。

在工具窗口中选择请求,在标题中我得到请求 URL:https://www.goodreads.com/book/reviews/385228?csm_scope=&hide_last_page=true&language_code=en&page=2&authenticity_token=XXX

【问题讨论】:

  • 能否请您附上您使用的网址?您可以将令牌替换为其他字符串
  • 这是我使用 Chrome 获取 URL 的方式:首先我浏览到 goodreads.com/book/show/385228.On_Liberty 然后我打开 Chrome 的开发者工具:(三个点 -> 更多工具 -> 开发者工具。选择网络选项卡。然后我转到页面底部(就在最后一次审查之后)并单击“下一步”。在工具窗口中选择请求,在标题中我得到请求 URL:goodreads.com/book/reviews/…

标签: python authentication urllib


【解决方案1】:

您能否尝试更新您的标题以包含更多项目,例如:

headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.3',
    'X-Requested-With': 'XMLHttpRequest',
}
req = urllib.request.Request(url,headers= headers)

在添加该标头时,我设法返回了 200 OK,但是,您从该端点返回的响应最终可能不是您真正需要的,因为它是一段 JavaScript 代码,作为回报更新 HTML 页面。您仍然可以以某种方式使用它,但这是一种非常肮脏的方法,并且可能会使事情复杂化。

您究竟需要什么信息?与使用第二个 URL 中的“有问题的”响应相比,可能有不同的方法。

【讨论】:

  • 我需要的信息是评分列表(评论者的用户名和该用户给出的星数)
  • 尝试在您的请求中添加标头,如果有帮助,请告诉我。如果您仍然需要它,我可以稍后更好地查看替代方法!
  • 是的,这行得通!我接受了答案。你能再帮我一件小事吗?当我尝试 ``` data = webUrl.read().decode('utf-8') print(data) ``` 我看到页面中有编码字符,例如 \u0026quot;有没有办法以不同的方式对其进行解码以获得更清晰的文本?谢谢!
  • 在您的特定情况下,您可以通过这种方式解码该字符串:bytes(data, 'utf-8').decode('unicode-escape'),但是,由于其他一些因素,这可能无法保证 100% 正确的输出,但我相信它应该对您有所帮助已经在“美化”你的字符串了。
猜你喜欢
  • 2015-07-14
  • 1970-01-01
  • 2011-03-04
  • 2013-04-21
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
相关资源
最近更新 更多