Xpath爬虫使用记录

#1.Xpath获取指定元素相邻的不被标签括起来的文本

div/preceding-sibling::a[1] 与div上面相邻的第一个a标签元素
div/following-sibling::a[1] 与div下面相邻的第一个a标签元素
div/preceding-sibling::text()[1] 与div上面相邻的第一个非标签文本元素
div/following-sibling::text()[1] 与div下面相邻的第一个非标签文本元素

实战:

如图:
image
已知图片中标注1、2、3对应的内容

在业务中我需要获取标志2对应的"58"这个值,但是这个值不包括在某个标签中,在span“集数”和br标签之间,为了减小获取"58"这个值不被之前的标签数量的影响

  1. 先获取标签1所对应的元素,因为标签1有property="v:initialReleaseDate"这个属性和属性值,所以很容易用xpath获取,且具有唯一性:
    //span[@property="v:initialReleaseDate"]

  2. 获取标签1元素对象之后,我们可以根据标签1为基准,算一下"58"这个值是相邻的第几个元素,如图可知除去span标签不看,是相邻2个元素(包括br在内)
    *[@id="info"]/span[@property="v:initialReleaseDate"]/following-sibling::text()[2]

    之后就可以拿到标注2的值
    image

  3. 成功拿到标注2的值“58”后,如果我 们好想再拿到标注3的"45分钟"这个值, 那我们就算算要相邻几个元素, 经过不断修改following-sibling::text()[index]中index的值最后发现是相邻的第4个值。
    *[@id="info"]/span[@property="v:initialReleaseDate"]/following-sibling::text()[4]
    image

#2. 获取a标签中onclick()内的sid值

<div class="pic">
      <a class="nbg" href="https://www.douban.com/link2/?url=https%3A%2F%2Fmovie.douban.com%2Fsubject%2F26683290%2F&amp;query=%E4%BD%A0%E7%9A%84%E5%90%8D%E5%AD%97&amp;cat_id=1002&amp;type=search&amp;pos=0" target="_blank" onclick="moreurl(this,{i: '0', query: '%E4%BD%A0%E7%9A%84%E5%90%8D%E5%AD%97', from: 'dou_search_movie', sid: 26683290, qcat: ''})" title="君の名は。" ><img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.webp"></a>
</div>

onclick="moreurl(this,{i: '0', query: '%E4%BD%A0%E7%9A%84%E5%90%8D%E5%AD%97', from: 'dou_search_movie', sid: 26683290, qcat: ''})"

data = xpahContext(context).xpath('//*[@id="content"]/div/div[1]/div[3]/div[1]/div[1]/div[2]/div/h3/a/@onclick')
sid = data[0][data[0].index("sid:") + 5 : data[0].index(", qcat")]

#3. xpath判断div的多个class中是否包含一个叫做paginator的class

//div[contains(@class, 'paginator')]

#4.获取 div 元素中的最后一个 a 标签

//div//a[last()]
posted @ 2023-11-18 18:13  黄伟鸿  阅读(35)  评论(0编辑  收藏  举报