我正在尝试使用python和美丽的汤刮一个网站。我在某些网站遇到过,虽然在浏览器上看到的图片链接在源代码中无法看到。但是,在使用Chrome Inspect或Fiddler时,我们可以看到相应的代码。 我在源代码中看到的是:
<div id="cntnt"></div>
但是在Chrome Inspect上,我可以看到在这个div类中生成的一大堆HTML \ CSS代码。有没有办法在python中加载生成的内容?我在python中使用常规urllib,我可以获得源但没有生成的部分。
我不是网络开发者,因此我无法用更好的术语表达这种行为。如果我的问题看起来模糊不清,请随时澄清一下!
答案 0 :(得分:14)
您需要JavaScript Engine来解析和运行页面内的JavaScript代码。 有一堆无头浏览器可以帮助你
http://code.google.com/p/spynner/
http://github.com/ryanpetrello/python-zombie
http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/
答案 1 :(得分:5)
网站的内容可能是在通过javascript加载后生成的,为了通过python获取生成的脚本,请参阅this answer
答案 2 :(得分:0)
常规刮刀只获取HTML文档。要获取JavaScript逻辑生成的任何内容,您需要一个Headless browser来生成DOM,加载和运行脚本就像常规浏览器一样。维基百科的文章和网络上的其他一些页面列出了这些及其功能。
请注意,选择之前的一些主要产品现在已被放弃。
答案 3 :(得分:0)
首先尝试!
也许从技术上讲数据可以在javascript本身中,并且需要所有这些javascript引擎业务。 (这里有一些很棒的链接!)
但是根据经验,我的第一个猜测是JS是通过ajax请求提取数据的。如果您可以让您的程序进行模拟,那么您可能会得到所需的一切,而无需进行任何繁琐的解析/执行/抓取工作!
这将需要一些侦探工作。建议您打开网络流量记录器(例如Firefox中的“ Web Developer Toolbar”),然后访问该站点。将注意力集中在任何/所有XmlHTTPRequest上。您需要的数据应该在这些响应之一中的某个位置,可能在某些JSON文本的中间。
现在,看看是否可以重新创建该请求并直接获取数据。 (注意:您可能必须设置请求的用户代理,以便服务器认为您是“真正的” Web浏览器。)