鱼C论坛

 找回密码
 立即注册
查看: 2029|回复: 8

[已解决]python中使用xpath爬取数据问题

[复制链接]
发表于 2023-8-25 17:30:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
如图我只想提取前4个节点的内容,该怎么修改呢?我不想要第5个节点的text文本内容。
微信截图_20230825171942.jpg


代码如下:

import requests
from lxml import etree

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}



a = requests.get("https://www.52pojie.cn/",headers=headers).text
b = etree.HTML(a)
c = b.xpath("//td[@valign='top']//a//text()")
for i in c:
    print(i)




在线等,谢谢。
最佳答案
2023-8-25 17:39:18
本帖最后由 陶远航 于 2023-8-25 17:42 编辑
python小小白哟 发表于 2023-8-25 17:36
刚试了下   这样不行  只获取了第一个节点的前4个内容

import requests
from lxml import etree

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}



a = requests.get("https://www.52pojie.cn/",headers=headers).text
b = etree.HTML(a)
for i in range(1,5):
    c = b.xpath(f"//td[@valign='top'][{i}]//a//text()")
    for i in c:
        print(i)

人工回答,实测可行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-25 17:30:23 | 显示全部楼层
根据你提供的代码截图,你想提取前四个节点的内容,并且不包括第五个节点的文本内容。你可以通过切片来实现这个目标。

这里假设你获取到的节点列表为c,你可以使用c[:4]来提取前四个节点:
c = b.xpath("//td[@valign='top']//a//text()")
for i in c[:4]:
    print(i)

在上述代码中,c[:4]表示从列表的开头开始,截取到索引为3(第四个节点)的位置,即提取了前四个节点。

这样修改后,你会发现只输出前四个节点的内容,而第五个节点的内容将被忽略。

希望这可以帮助到你!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 17:32:47 | 显示全部楼层
你可以使用切片操作来提取前4个节点的内容,即将 c 变量的取值范围限制在0到3之间。修改代码如下:
import requests
from lxml import etree

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}

a = requests.get("https://www.52pojie.cn/",headers=headers).text
b = etree.HTML(a)
c = b.xpath("//td[@valign='top']//a//text()")[:4]  # 使用切片操作获取前4个节点的内容
for i in c:
    print(i)

这样,只会打印出前4个节点的内容,而不包括第5个节点的文本内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 17:36:00 | 显示全部楼层
陶远航 发表于 2023-8-25 17:30
根据你提供的代码截图,你想提取前四个节点的内容,并且不包括第五个节点的文本内容。你可以通过切片来实现 ...

刚试了下   这样不行  只获取了第一个节点的前4个内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 17:37:12 | 显示全部楼层
isdkz 发表于 2023-8-25 17:32
你可以使用切片操作来提取前4个节点的内容,即将 c 变量的取值范围限制在0到3之间。修改代码如下:

刚试了下   这样不行  只获取了第一个节点的前4个内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-25 17:39:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 陶远航 于 2023-8-25 17:42 编辑
python小小白哟 发表于 2023-8-25 17:36
刚试了下   这样不行  只获取了第一个节点的前4个内容

import requests
from lxml import etree

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54"
}



a = requests.get("https://www.52pojie.cn/",headers=headers).text
b = etree.HTML(a)
for i in range(1,5):
    c = b.xpath(f"//td[@valign='top'][{i}]//a//text()")
    for i in c:
        print(i)

人工回答,实测可行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-8-25 17:42:45 | 显示全部楼层
6楼可以的,改了,看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 17:46:47 | 显示全部楼层
陶远航 发表于 2023-8-25 17:39
人工回答,实测可行

还是不行呀  还是只获取到了第一个节点的前4个标题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-25 17:47:55 | 显示全部楼层
陶远航 发表于 2023-8-25 17:42
6楼可以的,改了,看看

好的  这个可以了,多谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 22:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表