Xpath在Chrome中生效但在lxml中失效的爬取问题求助
解决Fandom假面骑士页面日文标题爬取失败问题及剧情简介翻译
一、日文标题爬取失败的修复
问题根源
Chrome开发者工具展示的是浏览器渲染后的DOM结构,而requests获取的是服务器返回的原始HTML,二者存在层级差异——你编写的XPath忽略了原始HTML中包裹日文标题的<p>节点;此外,无请求头的请求可能被网站返回简化结构,导致节点匹配失败。
修正方案
- 调整XPath,补充
<p>节点层级; - 添加浏览器请求头,模拟正常访问行为。
修正后的代码:
import requests from lxml import html # 模拟浏览器请求头,避免网站返回简化结构 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } def get_page_content(url): response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保字符编码正确 return html.fromstring(response.content) content = get_page_content("https://kamenrider.fandom.com/wiki/Conspiracy_IV:_Recapture_the_Driver!") # 修正XPath,补充原始HTML中存在的p节点层级 japanese_title = content.xpath("//div[@class='mw-parser-output']/p/span/span[@class='t_nihongo_kanji']/text()") print(japanese_title) # 输出: ['謀略Ⅳ:ドライバーを奪還せよ!']
二、剧情简介英文转中文
可以使用googletrans库实现翻译(若无法访问谷歌服务,可替换为百度、腾讯等国内翻译API,需自行申请密钥),示例代码:
from googletrans import Translator # 获取剧情简介的英文内容 synopsis_paragraphs = content.xpath("//p[preceding-sibling::h2[contains(span,'Synopsis')] and following-sibling::h2[contains(span,'Plot')]]/text()") english_synopsis = ' '.join(synopsis_paragraphs).strip() # 翻译为中文 translator = Translator() chinese_synopsis = translator.translate(english_synopsis, dest='zh-CN').text print(chinese_synopsis)
内容的提问来源于stack exchange,提问作者Oneechan69
相关产品推荐
相关产品推荐

