python - 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”
解决方案
问题是,自从出版这本书以来,网站 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,我会看看它是否有效并报告回来。
推荐阅读
- html - 如何防止用户的浏览器显示页面的缓存版本?
- python - 创建浮点输出列表并对其进行平均
- html - Flex 在网格中的行为不符合预期
- java - 坚持练习循环遍历数组时出错
- linux - 在 Linux 中允许用户在不拥有文件的情况下编辑文件
- linux - 在 Linux 中测量系统调用开销
- android - Google Places API Crash Javalite clash with other Firebase APIs
- sql-server - SQL Server 已安装,但未在 Windows 服务中显示
- git - 如何在 --destination-dir 中指定分支路径?
- java - 在 Java 中,我如何查看一个对象是否属于作为方法参数传递的正确类型?特别是如果类型是原始类型?