使用 python 抓取网页动态内容

Posted

技术标签:

【中文标题】使用 python 抓取网页动态内容【英文标题】:web scraping dynamic content with python 【发布时间】:2013-07-10 14:55:25 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

对于抓取动态内容,您不需要一个简单的抓取器,而是一个成熟的headless browser。

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

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

【讨论】:

【参考方案2】:

您可以使用 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');")

【讨论】:

请注意,ghost.py 已被废弃。上一次更新是在撰写本文时 2 年前。【参考方案3】:

之前here 提出了一个非常相似的问题。 引用的是 selenium,最初是用于 web-apps 的测试环境。

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

【讨论】:

“刚问”?您的链接指向 2011 年的主题。 - 无论如何,欢迎SO。对主题和您的回答感兴趣,我 +1 你说的完全正确,我什至没有寻找日期... 惭愧不过,感谢您的热烈欢迎!

以上是关于使用 python 抓取网页动态内容的主要内容,如果未能解决你的问题,请参考以下文章

python 如何抓取动态页面内容?

python网络爬虫抓取动态网页并将数据存入数据库MySQL

网页抓取具有动态 javascript 内容的网站

python爬虫-27-python之Selenium入门,动态网页抓取

Python入门动态网页分析及抓取

Python入门动态网页分析及抓取