【发布时间】:2016-11-05 02:56:03
【问题描述】:
我的脚本通过 imaplib 从电子邮件收件箱中获取 HTML 代码,将其传递给 BeautifulSoup 并尝试提取其中的所有 hrefs。
rv, data = M.SEARCH(None, '(FROM "foo@bar.com")')
if rv == 'OK':
for num in data[0].split():
typ, data = M.fetch(num, '(RFC822)')
html = data[0][1]
soup = BeautifulSoup(html, 'lxml')
for a in soup.find_all('a', href=True):
print a['href']
但是,html 变量包含的 HTML 代码每 N 个字符都有一个新行,从而阻止 BeautifulSoup 准确返回 href,尤其是已被新行分割的长代码。
到处都有=0D和3D这样的奇怪字符。
messages, <a=0D
href=3D"http://links.google.com/wf/click?upn=3DOGGGYNMPA980E3DmngbHusD=
Uo-2BK17XLM3ogFJfQXXXfMWZLdsQSSVv33HbPoHPXGcH8tSf9ZFFU5i-2FrV4O6ISlpDCIVaN5=
83xr1CGoa5yxZimagE5JiSUAhbZH8P7WiNvf35BsXrCxmrmRLMGB-2BJAQ-3D-3D_IcMuwcQVVt=
a699aeVjRRVxwBCNHkXaWO-2FyIlAqZ7CPsryDB24UVYZbMIvGLJb13chayC-2FLeucv-2FTrko=
7LaiaWHkzy85DWXrK1olI1SEJZs-2BMCAWfoVfloGJivlLSH0GQk0XeVT0j383tZrsymuWLF0S2=
q5j3LR91e76dRXQe7p8t5CgrBe-2FqGk6bmURG9XCNw3dwpHnymaR-2FggHQx6GnbbueF7PVp2H=
-2BGoHUEkMOSXJ8FfSgQIiGICvxz1zcBJPw-2FRoE3YDl-2By8XETkXjVaNchNA1ZN8FDCD5VUf=
V9oUOnavAirXX-2FEw1THfSpV4VYDX">unsubscribe</a></td>=0D
</tr>=0D
<tr>=0D
<td height=3D"12"></td>=0D
</tr>=0D
我们可以做些什么来解决这个问题?
【问题讨论】:
-
您可以尝试使用正则表达式提取
hrefs,而不依赖于BeautifulSoup
标签: python html python-2.7 beautifulsoup imaplib