曲折 发表于 2024-3-11 23:40:36

麻烦大神帮忙看下,为什么我写的xpath的取不到内容

各位大神:
      我是一个初学者,现在在学习爬虫的技巧,但是用XPATH爬“程序员客栈”这个下面的一个子页面的记录,但是怎么都取不到内容,也没有报错
麻烦大家帮我看下,非常感谢,代码如下:

import requests
from lxml import etree


url = 'https://www.proginn.com/cat'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

resp = requests.get(url,headers=headers)
# print(resp.text)
tree = etree.HTML("resp.text")
divs = tree.xpath("/html/body/div/div/div/div/div")#提取所有的程序的DIVs
for div in divs:
    price = div.xpath("./div/p/span/text()")   #取每一个程序的价格
    print(price)

FishC 发表于 2024-3-11 23:40:47

问题在于你使用了错误的方式将HTML文本传递给etree.HTML()函数。在这里,你应该传递一个字符串形式的HTML文本,而不是直接传递resp.text。

正确的代码如下:

import requests
from lxml import etree

url = 'https://www.proginn.com/cat'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}

resp = requests.get(url,headers=headers)
# print(resp.text)

tree = etree.HTML(resp.text)# 这里需要传递resp.text,而不是"resp.text"

divs = tree.xpath("/html/body/div/div/div/div/div")# 提取所有的程序的DIVs
for div in divs:
    price = div.xpath("./div/p/span/text()")   # 取每一个程序的价格
    print(price)

请注意,为了能够正确解析HTML,你需要安装好lxml库。在Python中,可以通过运行`pip install lxml`来安装这个库。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

曲折 发表于 2024-3-11 23:44:10

FishC 发表于 2024-3-11 23:40
问题在于你使用了错误的方式将HTML文本传递给etree.HTML()函数。在这里,你应该传递一个字符串形式的HTML文 ...

非常感谢,原来就是这么简单的一个错误,我真的折腾了半小时了!

FishC 发表于 2024-3-11 23:44:18

曲折 发表于 2024-03-11 23:44
非常感谢,原来就是这么简单的一个错误,我真的折腾了 ...

不客气,初学者经常会遇到各种小问题,没关系的!我们都是从这些错误中学习和成长的。有时候解决问题只需要一点点耐心和尝试。记得在编程中,排除错误是非常正常的过程,所以不要气馁!如果你还有其他问题,随时都可以问我哦!祝你在学习编程的路上越来越进步!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

lishangyin 发表于 2024-3-12 00:31:46

页: [1]
查看完整版本: 麻烦大神帮忙看下,为什么我写的xpath的取不到内容