0

我经常负责创建网络抓取算法,而我一直这样做的方式是直接抓取代码,这使得每个工具都特定于页面。

我想为浏览器创建一个插件(最好是 JavaScript),以便用户可以动态定义抓取执行顺序(记录一个脚本,稍后将解释并执行实际抓取)。

思路如下:

  1. 用户打开他想要抓取的页面,右键单击任意位置,然后点击“开始录制”,这会“激活”插件并将页面的 URL 保存到它的“录制文件”中。
  2. 对于用户需要单击/键入/更改的每个元素,他右键单击它,并显示一组特定于元素的选项。插件按顺序保存这些选择的选项。

  • 可以点击按钮。
  • 编辑可以用单个特定字符串填充,也可以用文件中的字符串列表循环抓取。
  • 可以对列表中的每个项目或与文件中的列表匹配的项目进行循环抓取。
  • ETC...

录制完成后,用户只需右键单击任意位置并点击“停止录制”,他将拥有一个包含所需抓取操作的类似脚本的文件。

之后,实际的抓取应用程序接管(自动或手动启动),并仅读取记录的文件,执行描述的操作并保存结果页面。

这些生成的页面稍后可以通过更容易编码的页面特定算法进行解析。


我知道说起来容易做起来难,但我很确定它是可以编码的。我需要一些帮助来确定“子步骤”:

  • “如何在浏览器的(+元素)上下文菜单中显示新选项?”
  • “如何知道右键单击了哪个元素?”
  • “如何从插件写入文件?”
  • ETC...

尽管其中一些问题之前已经提出过,但其中大多数是在不同的背景下提出的;即,您已经知道单击了哪个元素并希望在单击后执行功能的上下文;不是这里的情况。

4

1 回答 1

0

在过去的几天里,我实际上一直在编写一个 Greasemonkey 脚本来做到这一点:

它的工作原理如下

  1. 在页面中注入一个“抓取接口”

  2. 向文档注册 mouseup 监听器

  3. 当鼠标向上事件发生时,提取用户的选择,并将选择标记为要抓取的数据

  4. 在页面中插入 div/类以突出显示要抓取的数据

  5. 使用 GM_setValue 存储所有抓取指令/访问过的页面

  6. 在文本区域中显示抓取脚本,以便用户可以将其复制/粘贴到抓取应用程序

于 2012-08-21T17:45:48.557 回答