Skip to content

3.2 采集器高级用法

赵一鸣 edited this page Oct 12, 2016 · 9 revisions

3.2 采集器高级用法

标签(空格分隔): Hawk文档


常见问题

网页采集器中,填写关键字,却发现无法找到XPath。可能的原因:

  • 网页是动态网页

此时本网页不包含该关键字,建议考虑使用【嗅探方案】

  • 关键字太长

文本中包含不可见字符时经常出现。例如340[制表符]万,但用户可能会直接输入340万。Hawk搜索是按照严格字符串匹配的,就会匹配不成功,因此输入短一些,如340。

  • 该信息是标签(attribute) 标签指网页中非正文的信息,很多有价值的内容都属于标签: image_1at5q2o3p17ac17cekadlke6cp.png-25.6kB 当提取标签时,请勾选网页采集器中的【提取标签】。否则Hawk是不会执行搜索的。

  • 和 Chrome等浏览器得到的XPath不同

一方面,XPath的表示方法有很多种,这和正则类似。可能看起来不一样的XPath指代的都是同一个节点。

另一方面,Chrome会执行js代码,而js可能会改变网页的结构,因此XPath也就对应地发生变化了。这有可能会导致从Chrome拷贝出来的XPath在Hawk中不能使用。 Hawk未来不会考虑支持加入执行js代码的功能,因此,如果搜索XPath,还请以Hawk得到的结果为准。多搜多看,通常就能建立感觉

父节点XPath的意义

为了保证软件获取数据的稳定性,便有了父节点XPath.

手气不错会自动规约父节点

使用手气不错后,嗅探器会找到列表节点的父节点,以及挂载在父节点上的多个子节点,从而形成一个树状结构

  • 父节点(/html/div2/div3/div4)
    • 子节点1(/a1)
    • 子节点2(/a2/@href)
    • 其他省略 有时候,父节点的xpath是不稳定的,举个例子,北京上海的二手房页面,上海会在列表上面增加一个广告banner,从而真正的父节点就会发生变化。为了应对这种变化,通常的做法是手工修改【父节点XPath】,继续举例子,父节点的id为house_list,且在网页中全局唯一,你就可以使用另外一种父节点表示法//*[@id='house_list'](写法可以参考其他XPath教程),而子节点表达式不变。 Hawk在【手气不错】得到【确定】后,会询问是否提取父节点XPath,此时Hawk会自动提取【父节点XPath】到属性对话框中,从而方便修改。 当然,Hawk目前的一些bug,也都是因为手气不错导致的。