overmind 2023-12-22 10:37 采纳率: 82.4%
浏览 9
已结题

爬虫爬百度首页中使用etree中的xpath的具体问题

我想爬取未登录状态下的百度首页热搜

img

使用

xpath="/html/body/div[2]/div[1]/div[5]/div/div/div[3]/ul/li[1]/a/span[2]"
不可以

但是使用

xpath="//ul[@id='hotsearch-content-wrapper']/li/a/span[2]"
却可以

我不知道为什么?

  • 写回答

16条回答 默认 最新

  • 专家-司宇[在线] 2023-12-22 10:38
    关注

    引自强大而免费的微信小程序:皆我百晓生

    根据提供的信息,可以分析出两种xpath表达式的区别:

    第一种xpath表达式:/html/body/div[2]/div[1]/div[5]/div/div/div[3]/ul/li[1]/a/span[2] 第二种xpath表达式://ul[@id='hotsearch-content-wrapper']/li/a/span[2]

    两者的区别在于定位根节点的方式不同。

    第一种表达式使用了绝对路径来定位根节点。从html开始,通过依次指定节点名称和索引来到达目标节点。这种方式会依赖页面的具体结构,如果页面结构发生变化,或者在其他页面中使用该表达式可能会失效。

    第二种表达式使用了相对路径来定位根节点。以"//"开头表示相对于当前位置的路径,从任意位置开始。通过指定ul节点的id属性值为'hotsearch-content-wrapper'来定位目标节点。这种方式不会依赖页面的具体结构,更加灵活。

    可能导致第一种表达式失效的原因有以下几种可能:

    1. 页面结构发生变化,div的索引位置改变了;
    2. 页面加载完成后,部分节点是动态生成的,而第一种表达式没有考虑到这一点;
    3. 页面中存在多个相同的元素(可能是由于部分内容的重复),导致索引位置发生了改变。

    总的来说,使用第二种表达式更加稳定和灵活,建议使用相对路径来定位节点。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(15条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月22日