首页 > 解决方案 > lxml html.parse 返回错误读取文件未能加载外部实体

问题描述

与 lxml 争吵的新手,目前正在阅读 O'Reilly 的书。导入html表单lxml后,使用html.parse返回如下错误信息:

读取文件“ http://www.emoji-cheat-sheet.com/ ”时出错:无法加载外部实体“ http://www.emoji-cheat-sheet.com/

下面是代码:

from lxml import html
page = html.parse('http://www.emoji-cheat-sheet.com/')

这也可以在书籍相关存储库中找到:

https://github.com/jackiekazil/data-wrangling/blob/master/code/chp11-scraping/lxml_emoji_xpath.py

“hmtl.parse”

标签: pythonparsinglxml

解决方案


问题是,自从出版这本书以来,网站 emoji-cheat-sheet.com 已更改为https://www.webpagefx.com/tools/emoji-cheat-sheet/所以它会将您重定向到那里并使用简单的 html.parse无法处理重定向(并且可能会遇到加密问题,因为它现在使用 http s(安全加密)连接,如今大多数专业网站确实如此。

我能够使用请求库来解析它:

import requests
page = requests.get('https://www.webpagefx.com/tools/emoji-cheat-sheet')
content=page.content
print(content)

如果您尝试向该特定网站发出不安全的 http 请求,服务器仍会将您重定向到 https 页面。像这样的安全页面很难用原始库解析。

http://dictionary.com不会自动将您重定向到 https 站点,并且相同的代码可以正常工作。(我也试过你的表情符号网站,但没有用)..

如果您必须解析该特定站点,我建议使用 BeautifulSoup,我会看看它是否有效并报告回来。


推荐阅读