增量式Web抓取和避免重复数据

Incremental Web Scraping and Avoiding Duplicate Data


当从诸如论坛之类的网站提取数据时,通常只需要提取自上次提取数据以来发布的新数据。这可以通过在检测到重复数据时取消数据提取来实现。

可以对内部数据存储中的数据执行重复检查。通常,对在当前项目运行中提取的数据进行重复检查,但是也可以对从以前的项目运行中提取的数据进行执行。如果项目被配置为将已提取的数据添加到现有的数据中,那么重复检查只能执行以前的项目运行的数据。否则,内部数据将不会包含从以前的项目运行中提取的数据。

从论坛中采集数据 Extracting Data from a Forum
通过使用一个示例,可以最好地说明增量web抓取。下面的例子解释了如何从数据中提取数据[www.gaiaonline.com/forum/gaming-discussion/f.4/](http://www.gaiaonline.com/forum/gaming-discussion/f.4/)

forum

我们将在论坛的前100页中提取所有主题的数据,并每小时更新数据。从100页的主题中提取数据需要相当长的时间。如果我们每次更新数据时从所有主题中提取数据,我们将提取大量重复数据。我们将使用重复的特性来确保我们只提取新的或更新的主题。

首先,我们需要设计这个项目。我们创建了一个PageArea模板来遍历一个页面上的所有主题和一个分页导航模板来遍历所有页面。PageArea模板包含主题类型、标题和最后的发布日期。PageArea模板还包含一个链接模板,该模板链接到主题细节页面并从中提取一些数据。

主题标题显示在两个不同的位置,这取决于主题类型。我们为标题使用了另一个内容元素,以确保两个位置都被覆盖。

Project

现在,我们需要决定如何检测重复数据。主题标题和最后的日期可以用来检测重复的数据,因此我们在“title”和“last post date”内容元素上设置了重复的检查内容选项。

接下来,我们需要决定在检测到重复数据时要采取哪些操作。默认的操作是取消当前的模板,该模板基本上删除了重复的数据。当检测到重复数据时,我们需要取消整个项目,因此我们需要更改重复取消模板选项,这在More Options选项卡中找到。我们将这个选项设置为开始模板,因此项目取消了启动模板,从而导致整个项目。我们需要改变模板中包含重复内容的模板的选项,这是PageArea模板。

Advanced Options

下一个问题是论坛顶部的置顶话题。不管这些主题是否已经更新,这些主题仍然是置顶的。因为我们已经告诉 Visual Web Ripper在第一个重复行被检测到的时候取消数据提取,可视化的Web开膛手会立即取消数据提取,而不检查是否有新的非粘性(非置顶)的主题被发布。

如果我们知道论坛顶部有多少置顶帖,我们可以使用最小值。重复检查选项。该选项指定在取消模板之前, Visual Web Ripper 将处理的最小行数。复制的数据仍然会被删除,但是 Visual Web Ripper 将会继续重复数据直到它处理了最小的数据行。

如果我们不知道论坛将会有多少置顶的主题,或者如果我们希望我们的方法比猜测最多的置顶主题更准确可靠,我们可以使用一个脚本来决定Visual Web Ripper是否应该取消这个模板。在这种情况下,我们可以创建一个脚本,检查主题类型是否包含文本公告:或置顶:。复制的脚本只在检测到重复数据时执行,并且当脚本返回true时取消模板。

using System;
using mshtml;
using VisualWebRipper;
public class Script
{
    //See help for a definition of WrDuplicateActionArguments.
    public static bool IsCancelTemplateOnDuplicate(WrDuplicateActionArguments args)
    {
        try
        {
            if (args.InternalDataRow["type"] == "Sticky:" || args.InternalDataRow["type"] == "Announcement:")
                return false;   
            return true;               
        }
        catch(Exception exp)
        {
            args.WriteDebug(exp.Message);
            return false;
        }
    }
}

如果项目被配置为将已提取的数据添加到现有的数据中,那么重复检查只能执行以前的项目运行的数据,因此我们需要设置项目选项数据提取模式来添加现有的数据。


Project Data

只导出新的数据Exporting New Data Only

Visual Web Ripper 将在默认情况下导出所有数据,因此,如果将新提取的数据添加到现有数据中,那么所有数据都将被导出,包括现有数据。只有在需要向现有数据添加新提取的数据时,才可以使用选项导出最后的数据段,因此可以检查重复数据,但只需要导出新提取的数据。

重复检查导出 Duplicate Checks on Export

Visual Web Ripper 在默认情况下,将检查web抓取会话中的副本,这样它就可以执行一些操作,例如在遇到副本时停止web抓取会话。如果您总是提取所有数据,并且在找到副本时不需要停止web抓取,您可以在导出上设置advanced project选项复制检查。该选项指示Visual Web Ripper 执行对导出数据的重复检查,并确保导出数据不包含重复数据。在web抓取会话期间,当对导出的选项复制检查被设置为true时,不会执行重复检查。

匿名Web抓取 Anonymous Web Scraping


许多用户喜欢用私有的方式浏览网页。您可以使用代理服务器来隐藏您的IP地址,并在访问网站时保持匿名。

一些网站所有者不希望网页抓取工具从他们的网站中提取数据。如果他们认为用户不是人,他们可能会试图阻止访问他们的网站。当你在WebBrowser模式下运行数据提取项目时,Visual Web Ripper 的行为就像正常的Internet Explorer用户一样,你可以设置一个随机的页面加载延迟,让它看起来更像人。

使用代理服务器 Using Proxy Servers


当你访问一个带有网页浏览器或网页抓取工具的网站时,网站所有者可以记录你的IP地址,并且可以使用这些信息来识别你或者阻止你访问网站。

如果你不希望网站所有者在访问某个网站时能够识别你,你可以使用代理服务器来隐藏你的IP地址。当你使用代理服务器时,你不会直接访问目标网站,而是请求代理服务器访问你的网站。

代理服务器有很多不同的类型,但是Visual Web Ripper 只支持HTTP代理服务器。它不支持其他类型的代理服务器,比如Socks代理。

获得一个免费的私人代理交换帐户

许多公司专门提供代理服务器的访问费用。代理服务器也可以在web上免费提供,但是它们通常是缓慢和不可靠的。

私有代理交换机是一个具有大量IP地址的高性能代理服务器。当你对一个新网页提出请求时,一个IP地址会被随机分配给你。这使得你的电脑完全被隐藏起来,使得你很难发现和阻止你的网络抓取活动。

如何配置代理服务器 How to Configure Proxy Servers

在您购买了代理服务器访问或在web上找到了免费的代理服务器之后,您将收到一个或多个代理服务器的IP地址,可能还会有一个用户名和密码来访问代理。您需要打开项目选项屏幕并选择代理选项卡,从而将这些信息输入到数据提取项目中。

Proxies

此屏幕允许您选择代理源和代理轮流设置。您可以选择以下代理源之一:

  • No proxies: 该项目不会使用代理服务器。
  • Default proxies: 默认代理是适用于计算机上所有项目的代理。单击按钮配置默认代理来配置默认代理。
  • Proxy list: 这个项目使用了一个特定的代理列表。这些代理不与其他项目共享。单击按钮添加/编辑代理列表以指定代理列表。
  • Proxy configuration script: 该项目将使用一个代理配置脚本来获得一个代理。代理配置脚本有时在大公司中使用,以指定允许员工访问Internet的代理。
  • Proxy Switch: 在www.privateproxyswitch.com上创建一个帐户使用这个选项。请参阅上面的部分获得一个免费的私有代理交换机帐户。

代理轮流选项指定在提取数据时如何在多个代理之间进行轮流。

  • Rotate per page load: Visual Web Ripper 在切换到下一个代理之前,轮流间隔是页面的数量。
  • Rotate per minute: :轮流间隔是Visual Web Ripper在切换到下一个代理之前加载页面的分钟数。

Proxy List 代理列表
代理列表屏幕用于指定代理的列表并设置代理验证选项。

Proxies Lists

代理地址和端口必须以下列格式指定:
206.118.215.245:60099
在上面的示例中,206.118.215.245是代理服务器的IP地址,而60099是端口号。

代理验证 Proxy Verification

在切换到代理之前,可以自动验证代理是否可用。这允许数据提取项目在没有可用代理的情况下切换到下一个代理,从而避免由于代理不可用而过早地停止项目。

  • Verify proxy before use: 在切换到代理之前,将验证代理。
  • Verify connectivity only: 只会验证它是否可以连接到代理,而不会尝试使用代理来检索网页。
  • Verification timeout: 设置一个秒数, Visual Web Ripper将等待一个成功的代理验证。
  • Remove skipped proxies: 如果一个代理从代理列表中删除,它将被永久删除。该选项仅用于缺省代理Default Proxies

导入代理 Importing Proxy Servers

如果您正在使用大量代理服务器,那么将它们全部添加到每个项目中是很麻烦的。您可以使用Import代理按钮从CSV文件导入代理列表。CSV文件必须有以下格式:
Proxy Address, Username, Password 用户名和密码是可选列。

CSV Example 1:

proxy
173.244.220.185:8800
50.21.10.78:8800
134.22.166.242:8800

CSV Example 2:

proxy, username, password
173.244.220.185:8800, user1, pass1
50.21.10.78:8800, user1, pass1
134.22.166.242:8800, user1, pass1

使用免费TOR代理网络

TOR是一个免费的代理网络,你可以用它来隐藏你的IP地址。这个网络可以很好地处理web抓取,因为它大约每15分钟就会自动切换代理。一个数据提取项目可以运行几个小时,并且可以自动地使用许多不同的代理服务器。不幸的是,TOR网络通常非常慢,不适合专业使用。

模拟人web用户


在使用WebBrowser模式提取数据时,使用Internet Explorer的实例,因此Visual Web Ripper 似乎是一个正常的人类Web用户浏览目标网站。然而,Visual Web Ripper 可以比人更快地提取数据,因此它比人更快地请求网页,并且可以在可预测的时间间隔内。您可以在页面加载之间插入随机的时间延迟,以使Visual Web Ripper 看起来更像一个人的Web用户。

要插入一个随机页面加载延迟,打开项目选项屏幕,然后选择Advanced选项卡。

Page load delay

设置随机页面加载延迟选项,然后设置最小和最大页面加载延迟。 Visual Web Ripper 会随机选择一个页面加载延迟在这些值之间。页面加载延迟包括加载网页所需的时间,因此页面加载延迟没有影响页面加载延迟的时间。

如果您检查随机页面加载延迟选项,默认的页面加载延迟在1到5秒之间。

网络爬虫模式 Web Crawler Mode

Visual Web Ripper 可以从网络爬虫模式中提取数据以优化性能。当Visual Web Ripper在网络爬虫模式下运行时,它不会下载诸如JavaScript、样式表和图像文件等支持文件,因此它比WebBrowser模式快得多。然而,它与普通的web用户的行为也有很大的不同。如果你使用网络爬虫模式,你应该依靠代理服务器来保护你的隐私,因为许多流行的网站都能检测到网络爬虫。































©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 理解概念 在开始使用Visual Web Ripper之前,您需要理解底层的模板(Template)概念。大多数w...
    游侠儿evil阅读 670评论 0 0
  • 运行一个项目Running a Project 在您设计了一个数据提取项目之后,您需要运行它来提取数据。您可以以许...
    游侠儿evil阅读 1,169评论 0 0
  • 项目选项 项目选项是适用于整个项目的选项。最常用的项目选项与以下三个方面相关: 开始的urls 连接 代理 您可以...
    游侠儿evil阅读 829评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,803评论 6 342