-七白 2025-10-29 11:36 采纳率: 50%
浏览 7

python中xpath用法

在python中 获取div标签下方的文本信息,在xpath中显示是可以的,有内容,但是写到代码里运行却没有内容,是为什么?

import requests                        #导入requests模块
from lxml import etree                #导入etree模块
#定义字符串chapter_url
chapter_url = 'https://www.biqukan.la/book/4273/3062821.html'
r = requests.get(chapter_url)        #发送请求,并将返回结果赋值给r
html = etree.HTML(r.text)            #创建HTML对象html
print(r.text)
#选择h1节点并提取文本,将返回的列表第一项赋值给title
title = html.xpath('//h1/text()')[0]
print(title)                            #输出标题
#选择id属性值为“htmlContent”的div节点并提取文本
contents = html.xpath('//div[@id="htmlContent"]/text()')
for i in contents:                    #遍历列表
    #移除字符串头尾的空格,并赋值给content
    content = i.strip()
    print(content)                    #输出正文

img


img

  • 写回答

4条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-10-29 12:01
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 问题核心在于代码中使用XPath获取div标签下文本信息时,在交互环境(如直接在XPath工具中测试)能获取到内容,但在Python代码中却无法获取。这可能涉及到多个方面的原因,比如请求的页面结构与测试时不一致、解析过程中存在编码问题、XPath表达式编写错误等。
    2. 解决方案
      - 首先,确保请求到的页面内容是正确的。可以打印出requests.get(url).text来查看获取到的页面原始内容,检查页面结构是否与预期一致。
      - 然后,使用lxml库来解析页面并执行XPath查询。示例代码如下:
    import requests
    from lxml import etree
    
    url = '目标网址'
    response = requests.get(url)
    html = etree.HTML(response.text)
    div_texts = html.xpath('//div//text()')
    for text in div_texts:
        print(text.strip())
    
    • 在上述代码中,etree.HTML(response.text)将页面内容解析为可操作的树形结构,然后通过html.xpath('//div//text()')获取所有div标签下的文本信息。strip()方法用于去除文本两端的空白字符。
      3. 不同方案优缺点
    • 使用BeautifulSoup
      • 优点
      • 代码相对简洁,有更直观的方法来处理HTML和XML,例如通过find_all等方法查找元素。
      • 对新手友好,文档丰富,容易理解和上手。
      • 缺点
      • 性能相对lxml可能稍低,尤其是在处理大型文档时。
    • 使用lxml
      • 优点
      • 性能较高,适合处理大型XML和HTML文档。
      • 提供了丰富的XPath支持,功能强大。
      • 缺点
      • 代码相对复杂一些,需要对XML和XPath有更深入的理解。
        4. 总结
    • 当在Python中使用XPath获取div标签下文本信息失败时,要先检查请求的页面内容是否正确,然后选择合适的解析库(如lxmlBeautifulSoup)来解析页面并执行XPath查询。通过仔细排查和正确的代码编写,可以解决获取不到文本信息的问题。

    请注意,在实际使用中,需要将url替换为真实的目标网址。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 修改了问题 10月29日
  • 创建了问题 10月29日