使用python读取动态生成的网页
Posted
技术标签:
【中文标题】使用python读取动态生成的网页【英文标题】:Reading dynamically generated web pages using python 【发布时间】:2012-12-07 06:55:00 【问题描述】:我正在尝试使用 python 和美丽的汤来抓取一个网站。我遇到了在一些网站上,虽然在浏览器上看到的图片链接在源代码中却看不到。但是在使用 Chrome Inspect 或 Fiddler 时,我们可以看到相应的代码。 我在源代码中看到的是:
<div id="cntnt"></div>
但是在 Chrome Inspect 上,我可以看到在这个 div 类中生成的一大堆 html\CSS 代码。有没有办法在 python 中加载生成的内容?我在 python 中使用常规的 urllib,我能够获取源代码但没有生成的部分。
我不是网络开发人员,因此我无法更好地表达我的行为。如果我的问题似乎含糊不清,请随时澄清!
【问题讨论】:
网站的内容可能是通过javascript加载后生成的,因此参考这个答案-> ***.com/questions/8960288/… 您能提供有问题的网址吗?将有助于诊断 【参考方案1】:您需要 JavaScript 引擎来解析和运行页面内的 JavaScript 代码。 有一堆无头浏览器可以帮助你
http://code.google.com/p/spynner/
http://phantomjs.org/
http://zombie.labnotes.org/
http://github.com/ryanpetrello/python-zombie
http://jeanphix.me/Ghost.py/
http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/
【讨论】:
【参考方案2】:网站内容可能是通过javascript加载后生成的,通过python获取生成的脚本参考this answer
【讨论】:
【参考方案3】:普通的抓取工具只获取 HTML 文档。要获取由 JavaScript 逻辑生成的任何内容,您需要一个Headless browser,它还可以生成 DOM,像普通浏览器一样加载和运行脚本。 Wikipedia 文章和网络上的其他一些页面列出了这些内容及其功能。
在选择时请记住,其中一些以前的主要产品现在已被放弃。
【讨论】:
【参考方案4】:先试试吧!
也许技术上的数据可能在 javascript 本身中,并且需要所有这些 javascript 引擎业务。 (这里有一些很棒的链接!)
但根据经验,我的第一个猜测是 JS 是通过 ajax 请求拉入数据的。如果你能让你的程序模拟它,你可能会得到你需要的一切,而不需要任何繁琐的解析/执行/抓取!
不过,这需要一些侦探工作。我建议打开您的网络流量记录器(例如 Firefox 中的“Web Developer Toolbar”),然后访问该站点。将注意力集中在任何/所有 XmlHTTPRequest 上。您需要的数据应该在这些响应之一的某个地方找到,可能在一些 JSON 文本的中间。
现在,看看您是否可以重新创建该请求并直接获取数据。 (注意:您可能需要设置请求的用户代理,以便服务器认为您是“真正的”网络浏览器。)
【讨论】:
以上是关于使用python读取动态生成的网页的主要内容,如果未能解决你的问题,请参考以下文章
使用 Selenium 和 Python 进行用户输入的网页抓取动态网站