使用 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网络爬虫抓取动态网页并将数据存入数据库MySQL