https://www.ouedkniss.com/annonces/index.php?c=automobiles&keywords=hilux-4x4&annee_min=2017&p=1,这个搜索结果一共是三页

要爬的网址是上面这个,同一主题下我做了两个规则,主题名是F0805Hilux,然后发现用打数机的时候,两个规则跑接力赛,第一个规则跑第一页,第二个规则跑第二页,然后换第一个规则跑第一页,跑完程序结束。没见过这么偷懒的程序~~~

运行结果我放在了附件中

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
举报 使用道具
| 回复

共 3 个关于本帖的回复 最后回复于 2018-8-6 00:11

沙发
Fuller 管理员 发表于 2018-8-5 23:47:12 | 只看该作者
相同主题下定义两个规则时,两个规则一定能区分开才行,比如,一个规则抓的logo是淘宝,另一个规则抓的logo是天猫。而且抓logo的这个抓取内容还用自定义xpath写的,这样就能用来区分两个规则了

你的这两个规则,一个对应div[@class='annonce'],另一个对应div[@class='annonce annonce-store']。其实在一个网页上,这两种div都有,所以,两个都适应。第一页用了规则1,因为规则1排在前面,先用上了,第二页用了规则2,因为所有汽车都没有store信息。这样就会漏抓。


我看了一下,有没有store不影响你的规则,主要是不能被@class='annonce annonce-store'干扰。我实验一下



举报 使用道具
板凳
Fuller 管理员 发表于 2018-8-6 00:00:14 | 只看该作者
要想办法融合两种情况。只是不能给容器节点(Mother1)自定义xpath,但是可以手工修改规则。要注意操作顺序,因为每次点击“存规则”按钮存的都是自动生成的规则,手工修改的规则不能用“存规则”,所以,步骤应该是
1,在规则1基础上,定义好规则,点击“存规则”
2,点击“测试”按钮,选择“数据规则”窗口,看到生成规则,修改容器节点的xpath需要同时修改两处,xsl:apply-templates的select规则和xsl:template match规则
3,手工修改完成后,可以点击“测试单箱”看一下结果
4,如果测试满意了,点击“保存修改”,这时候就不能再点击“存规则”了。

要修改成这个样子:
1,select规则
  1. <xsl:apply-templates select="//*[contains(@class,'annonce') and contains(@id,'ann-') and count(.//*[@class='button button_details']/@href)>0]" mode="Mother1"/>
复制代码
注意看contains函数,一个是针对class的判断,只要包含annonce就要,但是,有太多节点包含annonce了,所以,又加了一个针对id的判断。
2,match规则也要相应修改
  1. <xsl:template match="//*[contains(@class,'annonce') and contains(@id,'ann-') and count(.//*[@class='button button_details']/@href)>0]" mode="Mother1">
复制代码

select和match要一致的。

这样两种情况就都包含了


举报 使用道具
地板
Fuller 管理员 发表于 2018-8-6 00:11:51 | 只看该作者
我刚才试了一下,用样例复制映射也可以,还是在第一个规则基础上,取消最顶上容器节点的定位标志映射(选中容器节点,鼠标右键有相应的菜单)。第一个样例就是第一个汽车对应的div,第二个样例选择挨着的那个div,那个div是块广告,不过不影响。这样也不用手工修改抓取规则。测试了可以抓到30个
举报 使用道具
您需要登录后才可以回帖 登录 | 立即注册

精彩推荐

  • 360或火绒等杀毒软件导致GooSeeker爬虫软件
  • 话题分析(NMF模型和LDA模型)软件的安装和
  • 运行Apple无法验证的程序的方法
  • 文本聚类分析软件的安装和使用方法
  • 利用AI阅读和分析文本:扣子COZE记录用户反

热门用户

GMT+8, 2025-5-14 10:48