繁体   English   中英

使用Python进行AJAX调用

[英]Making AJAX calls with Python

我正在尝试使用自制的Python脚本从网页获取锚点元素的href属性的值。 但是,当网页最初加载时,通过使用AJAX jQuery调用,网页将接收锚元素所在的div元素的所有内容。 div元素包含大约90%的网页内容。 如何获取div元素的内容以及锚元素的href属性的值?

稍后,在获得“ href”属性的值之后,我想要获得链接指向的网页的内容。 但不幸的是,该调用也是使用AJAX(jQuery)进行的。 当我在网络浏览器中单击此按钮时,地址栏中的网页地址不会更改,这意味着接收到的网页内容已加载到同一网页中(在上述div )元件。

得到这个之后,我将使用BeautifulSoup来解析网页。 那么,我将如何使用Python做到这一点? 我需要使用哪种模块? 所需的一般伪代码是什么?

顺便说一句,anchor元素具有一个onclick事件处理程序,该事件处理程序触发相应的jQuery函数,该函数将内容加载到网页内的div元素中。

此外,如果解决方案需要锚元素,则该锚元素不与id关联。

您想使用无头Web浏览器。 看一下Ghost.pyphantompy


我刚刚意识到幻影不再被积极开发,所以这是Ghost.py的示例。

我创建了一个空白的HTML页面。 一些JavaScript向div添加了几个链接。

<html>
    <body>
        <div id="links">
            <!-- Links go here -->
        </div>
    </body>

    <script type="text/javascript">
        var div = document.getElementById('links');

        var link = document.createElement('a');
        link.innerHTML = 'DuckDuckGo';
        link.setAttribute('href', 'http://duckduckgo.com');

        div.appendChild(link);
    </script>
</html>

因此,如果您现在要使用Beautiful Soup使用诸如soup.find_all('a')类的soup.find_all('a')来抓取页面,您将不会获得链接,因为没有任何链接。

但是我们可以使用无头浏览器为我们呈现内容。

>>> from ghost import Ghost
>>> from bs4 import BeautifulSoup
>>>
>>> ghost = Ghost()
>>>
>>> ghost.open('http://localhost:8000')
>>> 
>>> soup = BeautifulSoup(ghost.content)
>>> soup.find_all('a')
[<a href="http://duckduckgo.com">DuckDuckGo</a>]

如果您需要执行诸如单击链接来更改页面内容的操作,也可以执行此操作。 在项目的网站上查看样本用例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM