3

我正在尝试查找给定页面上的所有电子邮件并使用正则表达式匹配它们。我正在使用 BeautifulSoup 来获取所有标签

email_re = re.compile('[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*')

email = soup.findAll("a")
for j in email:
    email = j.string
    for match in email_re.findall(email):
        outfile.write(match + "\n")
        print match

但是,当我运行我的脚本时,它的这一部分会得到一个 TypeError: expected string or buffer。我认为这是因为 email 是 BeautifulSoup 对象,而不是 python 字符串。我尝试使用 str() 或str () 将其转换为字符串,并且都返回另一个错误:UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 9: ordinal not in range(128 )。我能做些什么来解决这些错误,并实际运行我的脚本。我没主意了。请帮忙!

4

1 回答 1

3

最有可能的是,该match变量具有unicode类型。要将其写入文件,需要使用某种编码对其进行编码。默认情况下,Python 尝试使用 ASCII 编码对其进行编码。请尝试以下方法:

outfile.write(match.encode('utf-8') + "\n")

您可能还想将UTF-8编码更改为您的 outfile 应该具有的编码。

还有一个不错的Unicode HOWTO for Python 2.x。但请注意,Python 3 有另一种更合乎逻辑的方法来处理 Unicode。

于 2013-04-17T02:45:14.273 回答