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/)
我们将在论坛的前100页中提取所有主题的数据,并每小时更新数据。从100页的主题中提取数据需要相当长的时间。如果我们每次更新数据时从所有主题中提取数据,我们将提取大量重复数据。我们将使用重复的特性来确保我们只提取新的或更新的主题。
首先,我们需要设计这个项目。我们创建了一个PageArea模板来遍历一个页面上的所有主题和一个分页导航模板来遍历所有页面。PageArea模板包含主题类型、标题和最后的发布日期。PageArea模板还包含一个链接模板,该模板链接到主题细节页面并从中提取一些数据。
主题标题显示在两个不同的位置,这取决于主题类型。我们为标题使用了另一个内容元素,以确保两个位置都被覆盖。
现在,我们需要决定如何检测重复数据。主题标题和最后的日期可以用来检测重复的数据,因此我们在“title”和“last post date”内容元素上设置了重复的检查内容选项。
接下来,我们需要决定在检测到重复数据时要采取哪些操作。默认的操作是取消当前的模板,该模板基本上删除了重复的数据。当检测到重复数据时,我们需要取消整个项目,因此我们需要更改重复取消模板选项,这在More Options选项卡中找到。我们将这个选项设置为开始模板,因此项目取消了启动模板,从而导致整个项目。我们需要改变模板中包含重复内容的模板的选项,这是PageArea模板。
下一个问题是论坛顶部的置顶话题。不管这些主题是否已经更新,这些主题仍然是置顶的。因为我们已经告诉 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;
}
}
}
如果项目被配置为将已提取的数据添加到现有的数据中,那么重复检查只能执行以前的项目运行的数据,因此我们需要设置项目选项数据提取模式来添加现有的数据。
只导出新的数据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地址,可能还会有一个用户名和密码来访问代理。您需要打开项目选项屏幕并选择代理选项卡,从而将这些信息输入到数据提取项目中。
此屏幕允许您选择代理源和代理轮流设置。您可以选择以下代理源之一:
- 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 代理列表
代理列表屏幕用于指定代理的列表并设置代理验证选项。
代理地址和端口必须以下列格式指定:
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选项卡。
设置随机页面加载延迟选项,然后设置最小和最大页面加载延迟。 Visual Web Ripper 会随机选择一个页面加载延迟在这些值之间。页面加载延迟包括加载网页所需的时间,因此页面加载延迟没有影响页面加载延迟的时间。
如果您检查随机页面加载延迟选项,默认的页面加载延迟在1到5秒之间。
网络爬虫模式 Web Crawler Mode
Visual Web Ripper 可以从网络爬虫模式中提取数据以优化性能。当Visual Web Ripper在网络爬虫模式下运行时,它不会下载诸如JavaScript、样式表和图像文件等支持文件,因此它比WebBrowser模式快得多。然而,它与普通的web用户的行为也有很大的不同。如果你使用网络爬虫模式,你应该依靠代理服务器来保护你的隐私,因为许多流行的网站都能检测到网络爬虫。