You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scrapy中抓取<td>内<strong>标签后的文本内容?

嘿,我来帮你解决这个抓取问题!你遇到的情况是因为XPath的text()只会抓取当前节点下直接的子文本节点,而你要的版本号是<strong>标签的兄弟文本节点,所以原来的写法拿不到它。下面给你两种靠谱的解决方案:

解决方案1:精准定位兄弟文本节点

直接用XPath的following-sibling轴,定位到<strong>标签后面的文本节点,这样能直接拿到目标内容:

rows = response.xpath('//table[contains(@class, "sortable")]/tbody//tr')
for row in rows:
    columns = row.xpath('td')
    # 定位到strong后的兄弟文本,再去除前后空白
    version = columns[0].xpath('strong/following-sibling::text()').extract_first().strip()

这个方法的好处是精准,只要页面结构不变,就能直接拿到版本号,不需要额外的字符串处理。

解决方案2:获取整个单元格文本后处理

如果担心页面结构可能有小变动(比如<strong>标签的位置调整),可以先拿到<td>下的所有文本内容,再通过字符串分割提取:

rows = response.xpath('//table[contains(@class, "sortable")]/tbody//tr')
for row in rows:
    columns = row.xpath('td')
    # 获取整个td的所有文本内容
    full_text = columns[0].xpath('string(.)').extract_first()
    # 按冒号分割,取后半部分并去除空白
    version = full_text.split(':')[-1].strip()

这个方法更鲁棒,哪怕标签结构略有变化,只要文本里的冒号分隔逻辑不变,就能拿到版本号。

顺带解释下你原来代码的问题:columns[0].xpath('text()')只会抓取<td>节点下的第一个子文本节点(也就是"Hadoop Software "),而<strong>标签和后面的版本号文本是<td>的其他子节点,所以自然拿不到目标内容啦。

内容的提问来源于stack exchange,提问作者thedevd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:25:37