用python抓取动态内容

2024-06-17 05:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python在像这样的web页面上擦掉“was you looking these authors:”框的内容:http://academic.research.microsoft.com/Search?query=lander

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

有什么诀窍能使这项任务容易些吗?


Tags: youwebhttp内容动态页面javascriptauthors
3条回答

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

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

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

回报

[<div class=​"inline-text-org" title=​"University of Manchester">​University of Manchester​</div>, 
 <div class=​"inline-text-org" title=​"University of California Irvine">​University of California ...​</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');")

前面有人问了一个非常相似的问题。 引用的是selenium,它最初是一个web应用程序的测试环境。

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

要抓取动态内容,不需要简单的抓取器,而需要成熟的headless browser

dhamaniasad/HeadlessBrowsers: A list of (almost) all headless web browsers in existence是我见过的这些语言中最完整的一个列表;它列出了每种语言有哪些绑定。

(请注意,所列项目中有多个已放弃!)

相关问题 更多 >