如何在网页中通过Python脚本调用ajax,而无需浏览器仿真或无头浏览器?
我刚接触ajax和javascript。
我正在爬取一个网站,使用Python下载网页后,借助XPath可以获取到相关的信息。
在这个网页上,有些信息只有点击一个链接后才能看到。这个链接会调用XHR来获取详细信息,我是通过Firefox的开发者工具发现的。你可以按Ctrl+Shift+Q或者通过工具 >> 网页开发者 >> 网络
来查看。我在附图中展示了这个链接和它的javascript属性,都是通过Firefox的开发者工具看到的,黑色矩形框内的内容就是。
我还可以通过同样的Firefox开发者工具查看ajax请求的URL、请求头、响应和参数。你可以在https://i.stack.imgur.com/9jhfr.png看到同样的图片。
我觉得我已经掌握了进行POST请求所需的所有信息。我想知道如何使用Python的request/urllib2等库来进行HTTP POST调用,这样我就能看到点击那个链接后网页上显示的详细信息。比如说:
requests.get(url, data=<我在Firefox中看到的参数>, headers=<我在Firefox中看到的请求头>)
简单来说,
我该如何用Python模拟ajax调用?或者说,如何获取点击那个链接后看到的信息?
我可以使用Selenium/PhantomJS或其他无头浏览器来自动化这个任务,但我想通过HTTP POST和GET来解决这个问题,这正是我在Firefox中点击链接时发生的事情。
1 个回答
首先,先安装 Firebug(https://getfirebug.com/)。
然后打开你要查看的网页,启动 Firebug,接着在 Firebug 面板中找到“网络”选项卡。
在这个选项卡里,你可以看到 Firefox 发送给网站的所有 GET 和 POST 请求。
现在你可以随意点击、刷新页面,看看都有哪些请求被发送。在你的情况下,点击按钮后,你会看到新的请求被发出,可能会在 HTML 选项卡里找到它。
在这里,你可以找到一个请求,点击它就能看到请求的详细信息。
把参数整理成一个字典,然后把它附加到你 POST 请求中的 "data=" 部分。你也可以把请求头整理成一个字典,附加到 POST 请求中的 "headers=" 部分。
注意:很多网站使用 cookies 来判断请求是否来自合法的浏览器,所以可能需要对 cookies 和网址进行一些调整!
如果你不告诉我们具体的网站,给出例子就会很困难。