使用 python 获取带有真实性令牌的 URL

Getting a URL with an authenticity token using python

我正在尝试使用 python 中的获取请求读取网页。 原来的URL是given here. I found out that the information I am interested in is in a subpage with this URL(我把真实性token换成了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的开发者工具:三个点->更多工具->开发者工具。选择网络选项卡。

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

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

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

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)

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

您具体需要什么信息?与使用第二个 URL.

的“有问题的”响应相比,可能有不同的方法