美丽的汤类型错误和正则表达式

时间:2013-04-17 02:24:47

标签: python regex beautifulsoup

我正在尝试查找给定页面上的所有电子邮件,并使用正则表达式进行匹配。我正在使用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:期望的字符串或缓冲区。我假设这是因为email是一个BeautifulSoup对象,而不是python字符串。我试图使用str()或 str ()将其转换为字符串,并且都返回另一个错误:UnicodeEncodeError:'ascii'编解码器无法编码位置9中的字符u'\ u2019' :序数不在范围内(128)。我该怎么做才能解决这些错误,并实际运行我的脚本。我没有想法。请帮忙!

1 个答案:

答案 0 :(得分:3)

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

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

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

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