4

我想自动从页面中抓取一些内容。

我想知道是否有可能:

  1. 页面加载后在页面上运行我自己编写的JavaScript(我使用FireFox。我没有能力更改页面的内容。我只想在我的浏览器上运行JS。)。该脚本将使用getelementbyid或类似的方法来获取到下一页的链接

  2. 运行 JavaScript 以在该页面上收集我感兴趣的内容(一些 URL)并将这些 URL 存储在本地文件中

  3. 转到下一页(下一页将真正加载我的浏览器,但我根本不需要干预)并重复步骤 1 和步骤 2,直到没有下一页。

执行此操作的经典方法是使用 LWP 编写 Perl 脚本或使用 CURL 等编写 PHP 脚本。但这都是服务器端的。我想知道我是否可以在客户端做到这一点。

4

2 回答 2

5

实际上,我做了一些类似的事情。

通过使用 GreaseMonkey,您可以编写一个用户脚本,该脚本将根据您的需要与页面进行交互。您可以获取下一页链接并根据需要滚动内容。

您还可以通过一些名为 GM_getValue 和 GM_setValue 的新函数在本地存储任何数据,在 Firefox 中。

我采取懒惰的方式。我只是生成一长串在浏览页面时找到的 URL。我做了一个粗略的“document.write”方法,然后我将我的 URL 列表作为一个批处理文件转储出来,该文件在wget.

那时我复制并粘贴批处理文件然后运行它。

如果您需要经常运行它以使其自动化,过去有一种方法可以将 GreaseMonkey 脚本转换为 Firefox 扩展,从而获得更多功能。

另一个选项目前是 AFAIK,仅限 Chrome。您可以收集所需的任何信息并从中构建一个大文件,然后使用download链接的属性并单击一下即可保存内容。

更新

我打算分享我正在做的完整代码,但它与一个特定的网站如此紧密地联系在一起,它并没有真正的帮助——所以我会寻求一个更“通用”的解决方案。

警告,此代码是即时键入的,实际上可能不正确。

// Define the container
// If you are crawling multiple pages, you'd want to load this from
// localStorage.
var savedLinks = [];

// Walk through the document and build the links.
for (var i = 0; i < document.links.length; i++) {
  var link = document.links[i];

  var data = { 
    url: link.url,
    desc = getText(link)
  };

  savedLinks.push(data);
}

// Here you'd want to save your data via localStorage.


// If not on the last page, find the 'next' button and load the next page
// [load next page here]

// If we *are* on the last page, use document.write to output our list.
// 
// Note: document.write totally destroys the current document.  It really is quite
// an ugly way to do it, but in this case it works.
document.write(JSON.stringify(savedLinks, null, 2));
于 2012-08-28T22:44:51.700 回答
2

Selenium/webdriver 将让您编写一个简单的 java/ruby/php 应用程序,该应用程序将启动 Firefox,使用其 JavaScript 引擎与浏览中的页面进行交互。

或者,如果网页不需要 JavaScript 来使您看到感兴趣的内容可用,您可以使用您喜欢的语言的 html 解析器并将浏览器排除在外。

如果您想在 Firefox 中使用 JavaScript 执行此操作,您可能可以在油脂猴脚本中执行此操作

于 2012-08-28T22:45:43.177 回答