爬所有tb图片通用代码-简单分析(xpath)

文章介绍

本文仅介绍使用xpath时,拿不到数据或数据不符预期的解决办法的思路,不包含xpath的基础讲解,如不了解xpath,请自行搜索学习。

本文以下载贴吧帖子中图片为例(文末有具体代码参考)

xpath简介

将html中所有标签转换为xml形式,使用xpath的相应语法进行解析及获得数据。

代码思路

爬虫所有的规则都是对比每次url的相同和不同之处:
相同之处直接复制使用;
不同之处就需要分析,这些不同之处和需求有哪些关系
下面以python吧为例

  1. 获取进入具体贴吧的地址规则 http://tieba.baidu.com/f?kw=
    相同:http://tieba.baidu.com/f?kw=
    不同:参数kw的value,python吧的value是python
  2. 获取python吧中页码地址规则
    相同:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=
    不同:页码相关字段 pn以50为单位,第一页为 0;第二页为 50;依次类推
  3. 获取每一页中某个帖子的地址规则
    相同:http://tieba.baidu.com
    不同:上述url后接的相对地址 如/p/6308130778,相对地址出现在html中<a>标签中<a rel="noreferrer" href="/p/6308130778" title="" target="_blank" class="j_th_tit"clicked="true"></a>可以获得
  4. 获取具体帖子所有页码地址规则
    相同:http://tieba.baidu.com/p/6299031436
    不同:http://tieba.baidu.com/p/6299031436?pn= pn的value为页数 如1/2/3/4
  5. 获取具体帖子具体页码中图片的地址规则
    图片的地址在 class="BDE_Image"<a>
  6. 使用图片地址下载图片

问题&解决思路

  1. 在查找帖子列表的时候,遇到使用xpath helper工具在浏览器中可以搜索到帖子列表数据,但是在代码中使用缺一直为空
    如下:<div class="threadlist_title pull_left j_th_tit ">,该标签为贴吧帖子列表,帖子名称的块标签。正常使用xpath搜索的代码是//div[@class="threadlist_title pull_left j_th_tit"。目前看来没有一点毛病,在helper里也能搜索出来相应的数据,但是一旦你复制到代码后就会发现,毛都匹配不出来。为什么呢~~~~~!!!!
    答:尝试将class的属性复制到文本里面,然后刷新帖子列表页面,再次找到这个标签,再次复制class属性,仔细的看,找区别???? 如果你幸运你会发现,这个属性居然会不定的加 一个空格、两个空格或者没有空格 !–’
    百度牛逼
    因为xpath精准匹配相应的规则,所以这种不固定的标签和属性,不能供我们使用,去找规律拿到所需的数据,只能换另外的标签,向外层找
  2. 使用Get请求是,如在url加参数,请注意对参数进行urlencode编码,
            pn = (num_text-1)*50
            word = {'pn': pn, 'kw': self.file_firstname, 'ie': "utf-8"}
            url_content = urllib.parse.urlencode(word)
            url = self.url + url_content

不编码有可能会报404哦
3. 贴吧html已经获取到了,但是使用xpath就是解析不出数据(xpath规则正确)
该问题再解答之前,我还想再说一句 百度真牛逼
想想这个问题也是很气的,因为没有专注的找,足足耗费了3天的业余时间。
因为百度将body里的标签以某种方式注释了,又因为xpath会自动过滤注释的内容,so问题真是让人很恼火

最后

新写手,不定期上传各种心得。给点动力,点个关注,点个赞!!
代码仅作为技术交流,不能使用非法用途,违法必究,要做遵纪守法的好公民
不直接贴代码了,所有的细节都在上述说过,有问题留言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值