-
Notifications
You must be signed in to change notification settings - Fork 971
3.2 采集器高级用法
赵一鸣 edited this page Oct 12, 2016
·
9 revisions
标签(空格分隔): Hawk文档
网页采集器中,填写关键字,却发现无法找到XPath。可能的原因:
- 网页是动态网页
此时本网页不包含该关键字,建议考虑使用【嗅探方案】
- 关键字太长
文本中包含不可见字符时经常出现。例如340[制表符]万
,但用户可能会直接输入340万。Hawk搜索是按照严格字符串匹配的,就会匹配不成功,因此输入短一些,如340。
-
该信息是标签(attribute) 标签指网页中非正文的信息,很多有价值的内容都属于标签: 当提取标签时,请勾选网页采集器中的【提取标签】。否则Hawk是不会执行搜索的。
-
和 Chrome等浏览器得到的XPath不同
一方面,XPath的表示方法有很多种,这和正则类似。可能看起来不一样的XPath指代的都是同一个节点。
另一方面,Chrome会执行js代码,而js可能会改变网页的结构,因此XPath也就对应地发生变化了。这有可能会导致从Chrome拷贝出来的XPath在Hawk中不能使用。 Hawk未来不会考虑支持加入执行js代码的功能,因此,如果搜索XPath,还请以Hawk得到的结果为准。多搜多看,通常就能建立感觉。
为了保证软件获取数据的稳定性,便有了父节点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,也都是因为手气不错导致的。