gpt4 book ai didi

python - 从使用 urllib2 或 BeautifulSoup 获取的(可能编码的)字符串返回小写 ASCII 字符串

转载 作者:行者123 更新时间:2023-11-28 21:28:08 26 4
gpt4 key购买 nike

我正在使用 urllib2 从网页中获取数据。所有页面的内容都是英文的,因此不存在处理非英文文本的问题。然而,这些页面是经过编码的,它们有时包含 HTML 实体,例如 £ 或版权符号等。

我想检查页面的某些部分是否包含某些关键字 - 但是,我想进行不区分大小写的检查(出于显而易见的原因)。

将返回的页面内容转换为全部小写字母的最佳方式是什么?

def get_page_content_as_lower_case(url):
request = urllib2.Request(url)
page = urllib2.urlopen(request)
temp = page.read()

return str(temp).lower() # this dosen't work because page contains utf-8 data

[[更新]]

我不必使用 urllib2 来获取数据,实际上我可以使用 BeautifulSoup,因为我需要从页面中的特定元素检索数据 - BS 是更好的选择。我更改了标题以反射(reflect)这一点。

但是,问题仍然存在,即获取的数据采用 utf-8 中的某些非 asci 编码(应该是)。我确实检查了其中一个页面,编码是 iso-8859-1。

因为我只关心英语,所以我想知道如何获得从页面检索到的数据的小写 ASCII 字符串版本 - 这样我就可以对关键字是否区分大小写进行测试在文中找到。

我假设我将自己限制在英语(来自英语网站)这一事实减少了编码的选择?。我不太了解编码,但我假设有效的选择是:

  • ASCII
  • iso-8859-1
  • utf-8

这是一个有效的假设吗?如果是,也许有一种方法可以编写一个“稳健”的函数来接受包含英文文本的编码字符串并返回它的小写 ASCII 字符串版本?

最佳答案

不区分大小写的字符串搜索比简单地搜索小写变体更复杂。例如,德国用户希望将 STRASSEStraße 与搜索词 Straße 匹配,但 'STRASSE' .lower() == 'strasse'(您不能简单地将双 s 替换为 ß - Trasse 中没有 ß)。其他语言(特别是 Turkish )也会有类似的并发症。

如果您希望支持英语以外的其他语言,那么您应该使用可以处理正确大小写的库(例如 Matthew Barnett's regexp)。

也就是说,提取页面内容的方法是:

import contextlib
def get_page_content(url):
with contextlib.closing(urllib2.urlopen(url)) as uh:
content = uh.read().decode('utf-8')
return content
# You can call .lower() on the result, but that won't work in general

关于python - 从使用 urllib2 或 BeautifulSoup 获取的(可能编码的)字符串返回小写 ASCII 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com