python小小白哟 发表于 2023-8-25 17:30:07

python中使用xpath爬取数据问题

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



代码如下:


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:30:23

根据你提供的代码截图,你想提取前四个节点的内容,并且不包括第五个节点的文本内容。你可以通过切片来实现这个目标。

这里假设你获取到的节点列表为c,你可以使用c[:4]来提取前四个节点:

c = b.xpath("//td[@valign='top']//a//text()")
for i in c[:4]:
    print(i)


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

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

希望这可以帮助到你!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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个节点的文本内容。

python小小白哟 发表于 2023-8-25 17:36:00

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

刚试了下   这样不行只获取了第一个节点的前4个内容

python小小白哟 发表于 2023-8-25 17:37:12

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




刚试了下   这样不行只获取了第一个节点的前4个内容

陶远航 发表于 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)


人工回答,实测可行

陶远航 发表于 2023-8-25 17:42:45

6楼可以的,改了,看看

python小小白哟 发表于 2023-8-25 17:46:47

陶远航 发表于 2023-8-25 17:39
人工回答,实测可行

还是不行呀还是只获取到了第一个节点的前4个标题。

python小小白哟 发表于 2023-8-25 17:47:55

陶远航 发表于 2023-8-25 17:42
6楼可以的,改了,看看

好的这个可以了,多谢。
页: [1]
查看完整版本: python中使用xpath爬取数据问题