【问题标题】:How to call ajax in a webpage from python script without browser emulation or headless brawser?如何在没有浏览器仿真或无头浏览器的情况下从 python 脚本调用网页中的 ajax?
【发布时间】:2014-05-07 10:45:47
【问题描述】:

我是 ajax 和 javascript 的新手。
我正在爬取一个网站,在使用 Python (urllib2/request/mechanize) 下载网页后,我可以在 XPath 的帮助下获取相关的详细信息。

在网页中,这些是一些只有在单击链接后才能看到的信息。该链接调用XHR 来获取我使用firefox 的Web 开发工具发现的详细信息。 (Ctrl+Shift+Q 或Tools >> Web Developer >> Network)我正在显示该链接及其使用 Firefox Web 开发人员工具可以看到的 javascript 属性(Ctrl+Shift+C 或Tools >> Web Developer >> Inspector)在粗黑色矩形下方的附加图像中。

我还可以通过相同的 firefox Web 开发工具查看 ajax 请求 url、标头、响应和参数。在http://i.stack.imgur.com/9jhfr.png 可以看到相同的图像

我认为我拥有POST 请求的所有有效负载。如何在 request/urllib2 等的帮助下使用 Python 进行 http post 调用?因此,作为回应,我可以在单击该链接后看到我在网页中显示的详细信息。点赞
requests.get(url, data=<paramter_to_post which i can see in firefox>, headers=<request headers that I can see in firefox>)

我做空了
如何使用python模拟ajax调用?或者如何获取点击该链接后我看到的信息?

我可以使用Selenium/PhantomJS 或其他headless 浏览器自动执行此任务。但我想使用 HTTP Post 和 Get 来解决这个问题,当我点击链接时,这正是在 Firefox 中发生的。

【问题讨论】:

    标签: python ajax xmlhttprequest web-scraping


    【解决方案1】:

    首先安装 firebug (https://getfirebug.com/)

    然后转到您的页面,启动 firebug 并转到 firebug 面板中的 Net 选项卡。 现在在此选项卡中,您可以看到您的 Firefox 发送到网站的所有 get/posts 调用。

    现在您可以四处点击、刷新页面并查看正在拨打的电话。在您的情况下,单击按钮,您会看到正在拨打新电话,您可能会在 html 选项卡中找到它。

    您可以在其中找到一个呼叫,一旦您点击它,您就会看到请求和其他详细信息。

    制作参数字典并将其附加到帖子中的“data=”。您还可以通过制作一个字典并将其附加到您帖子中的“headers =”来制作标题。

    请注意:许多网站都使用 cookie 来识别调用是否由合法浏览器发出,因此可能需要大量摆弄 cookie 和 url。 !

    如果你不给我们网站,就很难举例。

    【讨论】:

    • 无需安装firebug。我可以使用 Firefox 的内置 Web 开发工具查看所有内容。我可以使用Ctrl+Shift+Q 查看 XHR 通话的所有详细信息。然后单击 XHR 选项卡。在那里我可以看到所有的请求标头、响应标头、cookie、参数等,所以这根本不是问题。我的问题是如何使用所有信息发出 HTTP 获取请求?因为在参数的值中有人造函数。你可以在i.stack.imgur.com/9jhfr.png看到值
    • @AlokSinghMahor 您是否尝试过复制所有内容并将其用作 requests.post 调用中的“data=”?也把它变成 dict 然后用它作为“数据=”值? "callcount": "1" 而不是 callcount=1 在你的情况下
    • 没有没有尝试。因为我想我不会成功,因为价值观已经疯狂地创造了功能。就像i.stack.imgur.com/9jhfr.png中的第6行参数一样@
    • 好吧,我对 AJAX 没有任何经验,但如果它说它正在发送此特定数据,则它不会发送任何其他内容。似乎它并没有发送整个函数只是它的名称。我真的不知道,但是尝试一下应该不会超过几分钟,所以为什么不试一试呢?
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多