使用客户端输出刮取页面的高效练习?

时间:2015-12-27 10:59:43

标签: javascript python web-scraping pyqt pyqt4

我想要一个每小时都会抓取某个网页的脚本,并会在该页面中查找某个字符串。

但是,当我进入该页面并使用`view:source“时,我无法在源代码中看到该字符串。我被告知这是因为我正在寻找的字符串来自客户端上呈现的元素side(javascript),因此我只能在使用Chrome控制台手动检查该元素时看到它。

考虑到我想从我的webhost服务器(2.25GB RAM)运行该脚本,哪种实践/编程语言/环境最有效实现我想要的呢?

有人建议我使用Pyqt4,但是我的网络主机警告我这会破坏我的RAM并损害服务器性能。我应该注意,脚本应该非常简单,并且每小时只抓一页。

2 个答案:

答案 0 :(得分:1)

似乎问题可以通过PhantomJS解决,因为它会嘲弄真正的浏览器操作,从客户端代码中提取信息。

对于使用Javascript的PhantomJS,您可以查看testing-javascript-with-phantomjs

有关如何将PhantomJS与python一起使用,请查看this

希望有所帮助〜

答案 1 :(得分:0)

  

我在源

中看不到该字符串

如果您只需要获取页面的一个字符串,则可以编程以执行与js相同的操作。 如果JS发送ajax请求(GET或POST),你也可以使用纯Python来获取它,从而获取丢失的字符串。

假设页内脚本执行以下操作(注意代码可能在纯JS中,请参阅here示例):

$.ajax({
  url: "test.html",
  context: document.body
}).done(function() {
  $( this ).addClass( "done" );
});

所以在你的Python脚本中你要求' test.html'文件:

import requests 
base='http://example.com/'
r = requests.get( base + 'test.html')

从而得到所需的数据:

print r.headers['content-type']
// 'application/json; charset=utf8'
print r.text
// u'{"data":"<string>"...'