漂亮汤(Beautiful Soup)类型错误和正则表达式问题

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)。我应该怎么做才能避免这些错误,并让我的脚本正常运行呢?我已经没有任何想法了,请帮帮我!

你使用哪个Python版本?2.*还是3.*? - Aleksei Zyrianov
1
我正在使用Python 2.7。 - Chris Clouten
1
哪一行触发了错误?是 outfile.write(match + "\n") 吗? - Aleksei Zyrianov
1个回答

3

很可能,match变量是unicode类型。如果要将其写入文件,则需要使用某种编码进行编码。默认情况下,Python尝试使用ASCII编码进行编码。请尝试以下操作:

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

您可能还希望将 UTF-8 编码更改为您的输出文件应具有的编码。

此外,Python 2.x 有一个不错的Unicode HOWTO。但请注意,Python 3 有另一种更加逻辑的处理 Unicode 的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接