选择技术

Selection Techniques


选择技术是web抓取最重要的方面之一。当您点击web浏览器中的内容来创建内容和模板时,您将使用最基本的选择技术,这是简单的point and click。除了简单的point and click功能外,Visual Web Ripper还提供了一系列工具来帮助你做出完美的选择。这些工具包括:

  • 允许您操作选择XPath的XPath编辑器
  • 树形视图浏览器提供了一个不同的,更精确的网页视图
  • 列表选项,帮助您创建选择元素列表的选项
  • 帮助您将条件应用到选择XPath的过滤器

很重要的一点是,当您在Web浏览器中选择HTML元素时,Visual Web Ripper无法读懂您的思路。新手用户常常会在一些情况下感到困惑,比如当他们有一个搜索结果时,每个条目都有一个标题。有时标题是链接,有时是纯文本,所以标题的HTML可能是这样的:

<h1><a href="http://website.com">Heading as a link</a></h1>
<h1><span>Heading as plain text</span></h1>

如果您想要提取所有标题的文本,您可以选择第一个标题,并通过重复选择创建一个列表模板。如果第一个标题是链接,那么这样的选择只会选择链接的标题,而不是纯文本的标题。Visual Web Ripper 不知道你想要提取所有的标题,但是认为你在尝试选择链接。在本例中,您需要更改选择,以便在创建列表之前选择“标记”而不是链接标记。

选择XPath


每次单击web浏览器中的内容时,Visual Web Ripper 就会在幕后进行一些高级处理,以计算选择XPath。XPath是一种常用的语法,用于在类似于xml的文档中选择元素,比如HTML文档。Visual Web Ripper 使用了XPath的定制实现,它支持XPath v1.0语法。定制的Visual Web Ripper XPath版本还支持一系列特别设计的新方法来简化Web抓取。

选择XPath可以选择一个或多个HTML元素。通常,创建list模板使用一个选择多个元素的XPath。

Visual Web Ripper 有一系列工具可以帮助您创建一个完美的XPath,而不需要了解XPath语法。但是,在某些情况下,您可能需要手动调整XPath,因此,如果您想成为一个专业的web采集机,您必须知道XPath语法。

每次在web浏览器中进行选择时,您都可以在Options选项卡中查看选择XPath。

xPath

上面的图像中的XPath包含以下两个步骤:

  1. 使用ID属性值listView选择页面上的所有DIV标签
  2. 然后选择带有class属性值hproduct的所有子DIV标签

Visual Web Ripper 支持自定义XPath函数。请参阅自定义XPath函数获得更多信息。

Visual Web Ripper 支持以下非标准XPath方法、属性和axis。

非标准的XPath方法 Non-standard XPath Methods
Position 这是标准位置方法的一个扩展。
Position() - 类似于标准Postion XPath方法。
Position(StartIndex) - 选择除第一个StartIndex节点之外的所有节点。
Position(StartIndex, EndIndex) - 选择StartIndexEndIndex之间的所有节点。
Position(StartIndex, EndIndex, SkipLastIndex) - 选择StartIndexEndIndex-SkipLastIndex之间的所有节点。如果EndIndex为0,那么简单地跳过最后一个SkipLastIndex节点。
Example:
//table/tr/[position(2,0,1)]
Count 返回给定XPath的节点数量。
Count(XPath)
Example:
//table/tr/[count(td)=2]
Span 在选择中包含许多兄弟节点。
Span(Count) -在选择中包括计数Count的兄弟节点。
Span(UntilElementXPath) - 包括所有的兄弟节点,直到遇到UntilElementXPath指定的元素为止。
Example://div/p[span('hr')]
非标准XPath属性 Non-standard XPath Attributes
node-position 返回当前节点在其父节点中的位置。
root-node-position 返回其父节点中的根节点的位置。这只适用于PageArea模板选择,因为一个PageArea的根节点不是文档的根节点。如果PageArea tempate是一个列表模板,那么根节点就是当前的PageArea列表元素的节点。
tag-text 返回当前节点的文本,不包括任何子节点的文本。
非标准XPath Axis Non-standard XPath Axis
Root 一个PageArea模板选择的根节点。如果PageArea tempate是一个列表模板,那么根节点就是当前的PageArea列表元素的节点。

优化选择XPath / Optimizing the Selection XPath


如果目标页面的变化稍微有些变化,那么长的XPath不太可能很好地工作。XPath中的每一步都必须匹配页面上的HTML标记。如果这些标记中的任何一个被删除或移到网页的其他地方,XPath将会失败。

当您在web浏览器中单击HTML元素时,Visual Web Ripper会自动尝试创建一个优化的选择XPath。它通过使XPath尽可能短而做到这一点。例如,对DIV HTML元素的完整选择XPath路径如下:

DIV[1]/DIV[5]/TABLE[2]/TBODY[1]/TR[2]/TD[1]/DIV

如果DIV标签有一个惟一的ID值listView,那么优化的XPath就是:

//DIV[@id='listView']

Visual Web Ripper 将会在网页上寻找一个具有ID属性值listView的DIV标签。XPath非常健壮,对未来的页面更改不敏感。只要这个元素存在于网页上,XPath就可以工作,即使网页的其他部分也会改变。

Visual Web Ripper 喜欢使用ID属性来优化xpath,因为IDs在web页面上应该是惟一的。然而,有时网站使用的ID是特定的内容元素,例如产品ID,而这些ID不适合在XPath中使用。如果从产品目录中提取数据,通过使用XPath从所有产品细节页面中提取产品标题,您不希望XPath依赖于特定的产品ID,比如这个XPath:

//H1[@id='sku_245865']

这样的XPath只适用于一种特定的产品,而不适用于其他产品。在这种情况下,您需要使用没有IDs的XPath选项。您可以使用其他一些XPath选项来调整选择。

Optimize Xpath
Xpath 选项 XPath Options
Optimize XPath 自动尝试优化选择XPath,使之尽可能短。这使得XPath更加健壮,对未来的页面更改也不那么敏感。
Optimize without IDs 选择这个选项,告诉Visual Web Ripper 不要在xpath中使用id。Visual Web Ripper 喜欢使用ID属性来优化xpath,因为ID在网页上应该是唯一的。有些网站可能使用不适合XPath的id,因为它们与网页上的特定内容有关,比如产品id,或者因为它们是根据日期和时间生成的。
Accuracy 这个选项指定XPath中需要多少步骤。
一个四步XPath可以是这样的:
//TABLE/TBODY/TR/TD
一个两步的XPath可以是这样的:
//TR/TD
Attributes 该选项指定在XPath的第一步中应该使用哪些属性。
具有属性类的XPath可以是这样的:
//TABLE[@class='table1']/TBODY/TR/TD
将查找带有指定属性的第一个标记,该属性至少可以通过精度选项指定的步骤数量来生成XPath。例如,如果将属性设置为类,并且精度设置为2,那么XPath仍然可以像下面的XPath一样,如果标记TBODY、TR和YD没有一个类属性:
//TABLE[@class='table1']/TBODY/TR/TD
Row span 在PageArea模板中使用行span,在选择中包含指定的兄弟HTML元素数量。
例如,您可能想要选择标题元素和以下两段的第一个段落:
<h1>header text<h1><p>paragraph1</p><p>paragraph2</p><p>paragraph3</p><p>paragraph4</p>
在本例中,您可以选择header元素,并将行span选项设置为3。当在List模板中使用Row span时,它将应用到列表中的所有项,但是一个列表项的兄弟元素将不会与下一个列表项重叠。

创建列表Creating Lists


在许多情况下,您将希望从列表中提取数据,例如表或搜索结果。Visual Web Ripper有几个工具可以帮助你创建一个列表选择。
尝试使用不同的工具来确定给定场景的最佳技术。首先,最好先尝试创建列表上下文菜单工具。如果这不起作用,试试不同的列表选项。

创建列表上下文菜单 The Create List Context Menu

创建一个在大多数场景中起作用的列表的最简单方法是使用create list上下文菜单,遵循以下两个简单步骤:

  1. 在web浏览器中选择列表中的第一个元素。这个选择必须准确地选择第一个元素。例如,如果您正在创建一个选择表中的所有行的列表,那么该选择应该选择一个完整的表行。
  2. 右键单击列表中的另一个元素,并从上下文菜单中选择Create list。

以下两步的过程如下图所示:

步骤1 - 在web浏览器中选择列表中的第一个元素

Select First Elements

步骤2 - 右键单击列表中的另一个元素

Create List

Visual Web Ripper 使用列表中的两个元素的信息来创建完整的列表。如果列表中的行看起来不同,比如上面的图像中的交错行,那么选择一种类型的行并右键单击另一种类型的行是很重要的,这样Visual Web Ripper 就可以使用来自这两种类型的信息来创建完整的列表。如果在选择中没有包含某些类型的行,或者如果您想从选择中删除某些类型的行,可以使用上下文菜单保存在列表中,并从列表中删除。

列表选项 List Options

列表选项可用于重复选择,以便创建列表选择。要使用列表选项,您必须首先在web浏览器中选择一个HTML元素,然后选择其中一个列表选项。


List Options

自由重复(Free repeat)选项从选择XPath中删除位置信息,从而选择一个与所选元素相似位置的页面上的所有元素。这个选项通常会选择太多的元素,但是您可以使用扩展/限制(Expand/Limit)选择工具栏按钮来包含或者从列表选择中排除元素。

流重复(Flow repeat)选项在其父容器中重复选择。当您想要选择一个HTML列表中的所有元素,或者您想要选择单个表行中的所有列时,这个选项就可以很好地工作。

父流重复(Parent flow repeat)选项被设计用于为表中的所有行选择单个列。

手动(Manual)选项不修改选择XPath。如果您想手动输入选择XPath,请使用此选项。如果您输入的是选择多个元素的XPath,但是您没有选择手动列表选项,那么Visual Web Ripper 将不会把您的选择识别为一个列表选择,并且只处理列表中的第一个元素。

可以使用Start索引和Count选项来排除列表中的某些元素。Start index选项指定包含在列表中的第一个元素的索引。Count选项指定要包含在列表中的选项的数量。

Advanced Options选项卡包含列表选项跳过最后一行计数,它指定从列表末尾删除的固定数量的元素。

使用过滤器 Using Filters

选择筛选器用于限制选择,因此只有在满足特定条件时才选择元素。选择过滤器通常用于以下两种情况:

  • 当您想要将一个列表选择限制为包含特定子元素的元素时
  • 当您想从属性表中选择一个值时,一个特定的名称/值对位于不同的web页面的不同位置

使用筛选器来限制列表的选择 Using a Filter to Limit a List Selection

下图显示了一个列表选择,其中所有的行都被选中。标题行是表中的一个普通行,因此这个行包含在列表中。如果您想从这个表中提取数据,您通常不会对标题行感兴趣,因为它不包含任何数据。然而,有时很难将行排除在列表选择之外。


demo

请注意,上面的表中所有的行都有一个详细的链接元素。您可以使用此信息来过滤列表,因此只有包含该链接的行才包含在列表中。您可以通过右键单击链接元素,并从上下文菜单中选择必须包含这个元素过滤器。


image.png

现在,标题行已经从下面的列表选择中删除了。

image.png

使用筛选器来选择不同位置的内容

模板定义了如何从一种类型的网页中提取数据,例如产品目录中的产品细节页面。有时,内容位于同一类型网页的不同位置。例如,您可能有一个产品细节页面,它显示了产品属性列表,例如下面的屏幕截图。不同的产品可能有不同的产品特性。例如,在下图中,产品属性产品宽度可能位于表的不同位置。
Visual Web Ripper 在特定位置寻找内容,因此对于一种产品,它可以提取产品宽度,但对于另一种产品,它可以提取产品重量。

文本过滤器可以处理不同位置的内容。网页上的大多数数据属性都有一个相关的文本组件来描述数据属性。在下面的网页上,文本域产品宽度描述了产品宽度的数据属性,因此你可以告诉Visual Web Ripper 在表格中寻找文本“产品宽度”,然后选择相关的数据属性。

要使用文本过滤器,选择您想要提取的数据属性,右键单击相关联的文本元素,然后选择Must Have Text...过滤

image.png



























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

推荐阅读更多精彩内容

  • 理解概念 在开始使用Visual Web Ripper之前,您需要理解底层的模板(Template)概念。大多数w...
    游侠儿evil阅读 652评论 0 0
  • 项目选项 项目选项是适用于整个项目的选项。最常用的项目选项与以下三个方面相关: 开始的urls 连接 代理 您可以...
    游侠儿evil阅读 814评论 0 0
  • 运行一个项目Running a Project 在您设计了一个数据提取项目之后,您需要运行它来提取数据。您可以以许...
    游侠儿evil阅读 1,150评论 0 0
  • Content Transformation 内容转换脚本用于在从网页中提取内容后转换内容。内容转换通常用于HTM...
    游侠儿evil阅读 783评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,591评论 18 139