6

我想使用 Python 来抓取网页上的“你在寻找这些作者吗:”框的内容,例如:http ://academic.research.microsoft.com/Search?query=lander

不幸的是,盒子的内容是由 JavaScript 动态加载的。通常在这种情况下,我可以阅读 Javascript 来了解发生了什么,或者我可以使用像 Firebug 这样的浏览器扩展来了解动态内容的来源。这次没有这样的运气...... Javascript 非常复杂,Firebug 没有提供很多关于如何获取内容的线索。

有什么技巧可以使这项任务变得简单吗?

4

3 回答 3

10

您可以使用 ghost.py 直接与页面上的 JavaScript 交互,而不是尝试对其进行逆向工程。

如果您在 chrome 控制台中运行以下查询,您会看到它返回了您想要的所有内容。

document.getElementsByClassName('inline-text-org');

退货

[<div class=​"inline-text-org" title=​"University of Manchester">​University of Manchester​&lt;/div>, 
 <div class=​"inline-text-org" title=​"University of California Irvine">​University of California ...​&lt;/div>​
  etc...

您可以使用ghost.py在真实的 DOM 中通过 python 运行 JavaScript 。

这真的很酷:

from ghost import Ghost
ghost = Ghost()
page, resources = ghost.open('http://academic.research.microsoft.com/Search?query=lander')
result, resources = ghost.evaluate(
    "document.getElementsByClassName('inline-text-org');")
于 2013-07-12T07:26:41.753 回答
3

之前在这里提出了一个非常相似的问题。引用的是 selenium,最初是 web 应用程序的测试环境。

我通常使用 Chrome 的开发者模式,恕我直言,它已经提供了比 Firefox 更多的细节。

于 2013-07-12T06:32:47.423 回答
1

对于抓取动态内容,您不需要一个简单的抓取器,而是一个成熟的无头浏览器

dhamaniasad/HeadlessBrowsers:(几乎)所有存在的无头网络浏览器的列表是我见过的最完整的列表;它列出了每种语言都有哪些绑定。

(请注意,列出的项目中有不少被放弃了!)

于 2018-06-10T15:12:38.613 回答