我试图加载一个html页面并输出文本,即使我正确地获取了该网页,BeautifulSoup也以某种方式破坏了编码。
资源:
# -*- coding: utf-8 -*-
import requests
from BeautifulSoup import BeautifulSoup
url = "http://www.columbia.edu/~fdc/utf8/"
r = requests.get(url)
encodedText = r.text.encode("utf-8")
soup = BeautifulSoup(encodedText)
text = str(soup.findAll(text=True))
print text.decode("utf-8")
摘录输出:
...Odenw\xc3\xa4lderisch...
这应该是 Odenwälderisch
您犯了两个错误;您对编码的处理不当,并且将结果列表视为可以安全地转换为字符串而不丢失信息的内容。
首先,不要使用response.text
!此处不是BeautifulSoup错误,您正在重新编码Mojibake。当服务器未明确指定编码时,该requests
库将对text/*
内容类型默认使用Latin-1编码,因为HTTP标准指出这是默认设置。
请参阅
高级
文档
的“
编码” 部分
__
:
唯一的一次请求不会做到这一点,如果没有明确的字符集是存在于HTTP头 ,并 在
Content-Type
头中包含text
。
在这种情况下,RFC
2616指定默认字符集必须为ISO-8859-1
。在这种情况下,请求遵循规范。如果需要其他编码,则可以手动设置Response.encoding
属性,或使用raw
Response.content
。
大胆强调我的。
传递response.content
原始数据:
soup = BeautifulSoup(r.content)
我看到您使用的是BeautifulSoup3。您确实想升级到BeautifulSoup
4。第3版已于2012年停产,并包含多个错误。安装beautifulsoup4
项目,并使用from bs4 import BeautifulSoup
。
BeautifulSoup
4通常可以很好地找出解析时使用的正确编码,无论是从HTML<meta>
标记还是对提供的字节进行统计分析。如果服务器确实提供了字符集,您仍然可以从响应中将其传递给BeautifulSoup,但是如果requests
使用默认值,请首先进行测试:
encoding = r.encoding if 'charset' in r.headers.get('content-type', '').lower() else None
soup = BeautifulSoup(r.content, from_encoding=encoding)
最后但并非最不重要的一点是,使用BeautifulSoup 4,您可以使用soup.get_text()
以下命令从页面中提取所有文本:
text = soup.get_text()
print text
您正在将 结果列表
(的返回值soup.findAll()
)转换为字符串。这永远都行不通,因为Python中的容器会在repr()
列表中的每个元素上使用以生成
调试字符串 ,对于字符串而言,这意味着您会获得所有非可打印ASCII字符的转义序列。
问题内容: 我非常精通PHP,但想尝试一些新的东西。 我也了解一些Python,足以完成基础知识的工作,但是还没有在Web设计类型的情况下使用过。 我刚刚写了这个,它的工作原理是: 事实是,这似乎很麻烦。如果不使用诸如django之类的大型工具,那么编写可处理获取和发布的脚本的最佳方法是什么? 问题答案: 您的问题是关于基本CGI脚本的,请看您的示例,但是似乎每个人都选择了“使用我最喜欢的框架”来
问题内容: PEP 263定义了如何声明Python源代码编码。 通常,Python文件的前两行应以: 但是我看过很多以以下内容开头的文件: => 编码而不是编码。 那么,声明文件编码的正确方法是什么? 是了编码允许的,因为所使用的正则表达式是懒惰?还是仅仅是声明文件编码的另一种形式? 我问这个问题是因为PEP不在谈论编码,它只是在谈论编码。 问题答案: 在这里检查文档: “如果Python脚本的
因此,我最近开始使用ffmpeg下载实时流媒体视频,但我面临的问题是,下载的视频会阻塞很多,特别是对于长视频(如2小时)而言。 我当前用于下载流文件的命令:- ffmpeg-i"https://link. m3u8"-c复制output.mkv 此命令在35分钟长的视频中运行良好[没有任何卡滞问题],但在2小时长的视频中失败 当我试图使用x264 lib命令编码2小时长的视频时,它还显示了“无效长
本文向大家介绍Python网站验证码识别,包括了Python网站验证码识别的使用技巧和注意事项,需要的朋友参考一下 0x00 识别涉及技术 验证码识别涉及很多方面的内容。入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足。 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵。 读取图片 图片降噪
大家好,我希望这个程序能够对大写字母进行编码,而不使用其他字符,并通过输出传递它们。例如“你好,世界!”运行程序“URYY\d_YQ!”后应变为我得到的是Yluhreylbowjwboerylqdxk而不是“URYY\dyq!”这就是我应该得到的。如果有人能让我知道我做错了什么,我将不胜感激。提前谢谢。
我正在尝试使用JSoup获取此URL http://betatruebaonline.com/img/parte/330/ciguen%c3%91al.jpg 相反,正确的 http://betatruebaonline.com/img/parte/330/ciguen%cc%83al.jpg 我该怎么解决这个?多谢了。