我有一个网站,我想从中提取数据,而且它确实陷入了石器时代。没有Web服务,没有API,而且它是一个基于ASP / Session / table的布局页面。很难看。
我想屏幕抓它并使用js(coffeescript)自动化。我想知道这是否可行。我可以用C#和linqpad做到这一点,但后来我用正则表达式解析表(以及子表和子子表)。另外,如果我使用js或coffeescript,我会更熟悉这些语言,并且我将能够使用jQuery从DOM中提取元素。
我在这里看到两种可能性:
我还想稍微自动化页面(获取下一组结果)。这仅限于个人使用 - 我不会将某人的搜索结果用于我的业务。我只是想让一个糟糕的搜索引擎做我想做的事。
答案 0 :(得分:0)
答案 1 :(得分:0)
我写了一个类,它允许你提供一堆url和一个代码块来擦除chrome扩展中的页面。你可以在这里找到github repo:https://github.com/jkarmel/Executor。它可以使用更多的测试,我需要处理文档,但看起来它可能就是你想要的。
以下是如何使用它来从几个不同的页面获取所有链接:
/*
* background.js by Jeremy Karmel.
*/
URLS = ['http://www.apple.com/',
'http://www.google.com/',
'http://www.facebook.com/',
'http://www.stanford.edu'];
//Function will be provided to exector to collect information
var getLinks = function() {
var links = [];
var numLinks = $('a');
$links.each(function(i, val) {links.push(val.href)});
var request = {data: links, url: window.location.href};
chrome.extension.sendRequest(request);
}
var main = function() {
var specForUsersTopics = {
urls : URLS,
code : getLinks,
callback : function(results) {
for (var url in results) {
console.log(url + ' has ' + results[url].length + ' links.');
var links = results[url];
for (var i = 0; i < links.length; i++)
console.log(' ' + links[i]);
}
console.log('all done!!!!');
}
};
var exec = Executor(specForUsersTopics);
exec.start();
}
main();
基本上,收集链接的代码将提供给执行程序实例,然后您可以使用回调中的结果执行任何操作。它可以处理冗长的url列表(~1000),它可以一次处理多个(默认== 5)。它现在不能很好地处理代码块中的错误,因此请务必测试您提供的代码。
答案 2 :(得分:0)
您可以使用Node.js,jsdom和jQuery轻松完成。请参阅this tutorial(在JavaScript中)。