gpt4 book ai didi

javascript - 使用 Python 进行 AJAX 调用

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:47 25 4
gpt4 key购买 nike

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

后来我得到'href'属性的值后,想得到链接指向的网页内容。但不幸的是,该调用也是使用 AJAX (jQuery) 进行的。当我在网络浏览器中点击这个时,地址栏中的网页地址没有改变,这意味着接收到的网页内容被加载到同一个网页中(在上面提到的 div) 元素。

得到这个之后,我将使用 BeautifulSoup 来解析网页。那么,我怎样才能用 Python 做到这一点呢?我需要使用什么样的模块?需要什么通用伪代码?

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

此外, anchor 元素不与 id 相关联,如果解决方案需要的话。

最佳答案

您想使用 headless 网络浏览器。看看Ghost.pyphantompy .


我刚刚意识到 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>

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

但我们可以使用 headless 浏览器来为我们呈现内容。

>>> 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>]

如果您必须执行某些操作(例如单击链接以更改页面上的内容),您也可以这样做。查看Sample use case在项目的网站上。

关于javascript - 使用 Python 进行 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30173293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com