[英]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.py或phantompy 。
我刚刚意识到幻影不再被积极开发,所以这是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.