24

我正在尝试使用 python 和漂亮的汤来抓取一个网站。我遇到了在一些网站上,虽然在浏览器上看到的图片链接在源代码中却看不到。但是在使用 Chrome Inspect 或 Fiddler 时,我们可以看到相应的代码。我在源代码中看到的是:

<div id="cntnt"></div>

但是在 Chrome Inspect 上,我可以看到在这个 div 类中生成的一大堆 HTML\CSS 代码。有没有办法在 python 中加载生成的内容?我在 python 中使用常规的 urllib,我能够获取源代码但没有生成的部分。

我不是网络开发人员,因此我无法更好地表达这种行为。如果我的问题似乎含糊不清,请随时澄清!

4

4 回答 4

17

您需要 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/

于 2012-12-19T20:56:13.333 回答
6

通过javascript加载后可能会生成网站的内容,为了通过python获取生成的脚本,请参阅this answer

于 2012-12-19T20:33:13.703 回答
0

常规的抓取工具只获取 HTML 文档。要获取由 JavaScript 逻辑生成的任何内容,您宁愿需要一个Headless 浏览器,它也可以生成 DOM、加载和运行脚本,就像普通浏览器一样。Wikipedia 文章和网络上的其他一些页面列出了这些及其功能。

选择时请记住,其中一些以前的主要产品现在已被放弃。

于 2018-05-29T19:55:24.460 回答
0

先试试这个!

也许技术上的数据可能在 javascript 本身中,并且需要所有这些 javascript 引擎业务。(这里有一些很棒的链接!)

但根据经验,我的第一个猜测是 JS 是通过 ajax 请求拉入数据的。如果你能让你的程序模拟它,你可能会得到你需要的一切,而不需要任何繁琐的解析/执行/抓取!

不过,这将需要一些侦探工作。我建议打开您的网络流量记录器(例如 Firefox 中的“Web Developer Toolbar”),然后访问该站点。将注意力集中在任何/所有 XmlHTTPRequest 上。您需要的数据应该在这些响应之一的某个地方找到,可能在一些 JSON 文本的中间。

现在,看看您是否可以重新创建该请求并直接获取数据。(注意:您可能必须设置请求的用户代理,以便服务器认为您是“真正的”网络浏览器。)

于 2018-09-06T14:37:41.157 回答