Language agnostic 屏幕抓取陷阱

Language agnostic 屏幕抓取陷阱,language-agnostic,screen-scraping,Language Agnostic,Screen Scraping,在屏幕抓取时,需要注意什么 这样做的灵感是:我配偶的同事让我从她癌症朋友在最后几个月里保存的博客上刮下所有的页面,这位女士想保留所有的帖子,以防博客被删除。我最终找到了一个几乎不够好的免费工具 抓取许多博客页面的一个问题是,通常会有一个导航菜单,您可以单击三角形以按年份或月份扩展帖子列表。这些小家伙创造了大量的重复内容,因为你会一次又一次地拥有相同的页面,不同的菜单组合被展开/折叠。在Blogger的例子中,我不确定这是可以避免的,因为链接都被格式化为真正的http链接,而不是明显的JavaSc

在屏幕抓取时,需要注意什么

这样做的灵感是:我配偶的同事让我从她癌症朋友在最后几个月里保存的博客上刮下所有的页面,这位女士想保留所有的帖子,以防博客被删除。我最终找到了一个几乎不够好的免费工具

抓取许多博客页面的一个问题是,通常会有一个导航菜单,您可以单击三角形以按年份或月份扩展帖子列表。这些小家伙创造了大量的重复内容,因为你会一次又一次地拥有相同的页面,不同的菜单组合被展开/折叠。在Blogger的例子中,我不确定这是可以避免的,因为链接都被格式化为真正的http链接,而不是明显的JavaScript调用。不过,这让我想到:


如果你要刮一个网站,你会补偿哪些潜在的不明显的东西?

首先,我会检查RSS提要。在blogger上,如果我没记错的话,您只需将
/rss
添加到根url

然后,我会检查是否已经有一些工具来刮博客

然后,如果没有RSS提要,也没有现有的工具,我会放弃,用复制/粘贴手工完成。除非我们说的是5000页,否则那样会更快更容易。从尝试过的人那里拿走

如果您有权访问实际帐户,blogger具有导出功能


编辑:当然,你也可以试试mechanical turk。

就gotchas而言。限制在某段时间内发出的请求量通常是个好主意。在短时间内粉碎一个有大量请求的站点是让您的请求被拒绝的好方法。

I screen scrape很多。一些建议:

  • 为您要使用的某个浏览器模拟。不同的网站通常会根据您的用户代理返回非常不同的结果。如果他们不认识用户代理,他们通常会恢复到最低公分母,因此通常最好从最近的浏览器开始。(例如,如果魔兽世界Armory认为你是最近的Firefox,它会返回漂亮、易于解析的XML。如果它不知道你是什么,它会发送糟糕的HTML)
  • 对你正在清理的网站要有礼貌;不要打得太重。如果你使用多线程,一次发出多个请求,你的scraper会运行得更快,但这会让网站所有者感到恼火
  • 在错误处理方面要聪明。不要像while(1){makeRequest();}那样编写代码。如果您的代码或服务器抛出错误,这样的循环将立即获取另一个请求,生成另一个错误。它会很快变丑。如果你看到很多错误,就要处理好错误,考虑睡觉或退出。
  • 在开发解析代码时,针对缓存版本进行测试,而不是每次都访问服务器。将使您的开发更快,并且是简单测试套件的基础
  • 不要使用正则表达式进行刮除 虽然正则表达式适用于各种各样的任务,但我发现在解析HTMLDOM时,正则表达式通常存在不足。HTML的问题是,文档的结构非常多变,很难准确地(准确地说,我指的是100%的成功率,没有误报)提取标记

    我建议您使用一个DOM解析器,比如BeautifulSoup或等效的(PHP中的SimpleHTMLDom)

    有些人可能认为这是一种过分的做法,但最终,它将更易于维护,并允许更多的可扩展性

    可以设计一个正则表达式来实现相同的目标,但会受到限制。例如,开发一个正则表达式来获取
    src
    alt
    标记将强制
    alt
    属性位于
    src
    之后或相反的位置,并且为了克服这个限制,将增加正则表达式的复杂性

    也可以考虑以下几点。要正确匹配

    属性(在组2中捕获),需要以下正则表达式:

    <\s*?img\s+?[^>]*?\s*?src\s*?=\s*?(["'])((\\?+.)*?)\1[^>]*?>
    
    ]*?\s*?src\s*?=\s*?([“'))((\ \?+)*?)\1[^>]*?>
    
    同样,如果出现以下情况,上述操作可能会失败:

    • 属性或标记名为大写,不使用i修饰符
    • src
      属性周围不使用引号
    • 然后,另一个属性
      src
      在其值的某处使用了>字符
    • 还有一些我没有预见到的原因

    因此,再次强调,不要使用正则表达式解析dom文档。

    除了技术方面的考虑之外,请确保不要将自己置于法律风险之中。大多数大型网站在其使用条款中都有特定的法律语言,不允许通过自动计算机程序对其服务进行编程访问,而且,显而易见美国版权问题


    从技术角度来看,一定要使用DOM解析器库,这样可以节省大量的时间。许多解析器提供了将HTML读入XML结构的能力,可以使用XPath查询XML结构以准确找到所需内容。

    如果您知道有人可以访问该帐户,他们可以使用