深度学习,深度睡眠 2023-04-27 14:57 采纳率: 68.8%
浏览 64
已结题

lxml.etree.HTML()解析网页丢失内容

使用requests爬取的网页,保存后可以搜到我要的元素,但是使用lxml.etree.HTML()解析后定位不到该元素,通过定位它父级元素发现,父级下面的子元素丢掉了一部分,再通过lxml.etree.tostring()将解析后的网页保存下来,也搜不到该元素,可以确定是lxml.etree.HTML()解析丢失内容,通过lxml.parse()解析本地保存的网页也无法找到该元素,仍然丢失内容,lxml.etree解析存在问题,请问怎么解决?
(请不要定位head里面的描述,必须定位红框中的位置,解决lxml.etree.HTML()解析丢失内容的问题)

img

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/112.0.0.0 Safari/537.36 Edg/112.0.1722.58',
    'referer':'https://www.ad.siemens.com.cn',
}

def parse_detail():
    url = 'https://www.ad.siemens.com.cn/service/answer/solve_286822_1077.html'
    res = requests.get(url,headers=headers)
    with open('detail.html','w',encoding='utf-8') as f:
        f.write(res.text)
    html = etree.HTML(res.content)
    content = html.xpath('//*[@class="extra-wide-answer"]')[0]
    title = ''.join(content.xpath('//div[@class="top-title"]/div[1]/h1/text()')).strip()   # 问题标题
    description = html.xpath('/html/body/div[4]/div[2]/div[3]/div[8]/p[4]/text()')  # 问题描述

  • 写回答

2条回答 默认 最新

  • a884248221 2023-04-27 15:27
    关注

    判断解析出现问题的根本原因是网页内容在爬取和解析过程中可能被修改或丢失。针对这种情况,可以尝试使用其他HTML解析库(如BeautifulSoup等)再次解析,或者使用正则表达式进行匹配。另外,可以记录下未解析到目标元素的网页源代码,检查是否存在类似于嵌套不当、HTML语法错误等问题。
    https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
    上面是BeautifulSoup我之前收藏的文档,挺好用的
    而根据您提供的Python代码,代码中的问题大概率出现在以下行:

    content = html.xpath('//*[@class="extra-wide-answer"]')[0]
    description = html.xpath('/html/body/div[4]/div[2]/div[3]/div[8]/p[4]/text()')

    其中content = html.xpath('//*[@class="extra-wide-answer"]')[0]使用了相对路径,可能匹配到了多个元素;而下一行description = html.xpath('/html/body/div[4]/div[2]/div[3]/div[8]/p[4]/text()')使用了绝对路径,定位具体位置可能有误。建议尝试以下方法进行解决:

    1. 使用更具体的XPath定位目标元素,例如:

    content = html.xpath('//div[@class="extra-wide-answer"]/node()')
    description = html.xpath('//p[@class="regular-text-info"]/text()')

    1. 尝试使用BeautifulSoup等其他HTML解析库,比较一下解析后的结果是否一致;

    2. 检查网页源代码,确认该元素确实存在并且没有被动态加载替换。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月27日
  • 修改了问题 4月27日
  • 修改了问题 4月27日
  • 创建了问题 4月27日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上