我想用Python来填写网页上的“你在找这些作者:”框的内容,如下所示:http://academic.research.microsoft.com/Search?query=lander
不幸的是,该框的内容是由JavaScript动态加载的。通常在这种情况下,我可以阅读Javascript来弄清楚发生了什么,或者我可以使用像Firebug这样的浏览器扩展来确定动态内容的来源。这次没有这样的运气...... Javascript非常复杂,Firebug没有提供很多关于如何获取内容的线索。
是否有任何技巧可以轻松完成此任务?
答案 0 :(得分:8)
您可以使用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');")
答案 1 :(得分:3)
早些时候提出了一个非常类似的问题here。 引用的是selenium,最初是web-apps的测试环境。
我通常使用Chrome的开发者模式,恕我直言已经提供了比Firefox更多的详细信息。
答案 2 :(得分:1)
对于抓取动态内容,您不需要一个简单的刮刀,而是一个完整的headless browser。
dhamaniasad/HeadlessBrowsers: A list of (almost) all headless web browsers in existence是我见过的最完整的列表;它列出了每种语言都绑定的语言。
(请注意,超过一些列出的项目已被放弃!)