【发布时间】:2016-06-07 15:56:23
【问题描述】:
我有一个数据转储,我试图从中提取所有电子邮件。
这是我使用 BeautifulSoup 编写的代码
import urllib2
import re
from bs4 import BeautifulSoup
url = urllib2.urlopen("file:///users/home/Desktop/emails.html").read()
soup = BeautifulSoup(url)
email = raw_input(soup)
match = re.findall(r'<(.*?)>', email)
if match:
print match
示例数据转储
<tr><td><a href="http://abc.gov.com/comments/24-April/file.html">for educational purposes only</a></td>
<td>7418681641 <sampleemail@gmail.com></td>
<td>advqos@abc.gov.com</td>
<td nowrap="">24-04-2015 10.31</td>
<td align="center"> </td></tr>
<tr><td><a href="http://abc.gov.com/comments/24-April/test.html">no_subject</a></td>
<td>John <someemail@gmail.com></td>
<td>advqos@abc.gov.com</td>
<td nowrap="">24-04-2015 11.28</td>
<td align="center"> </td></tr>
<tr><td><a href="http://abc.gov.com/comments/24-April/test.html">something</a></td>
<td>Mark <123random@gmail.com></td>
<td>test@abc.gov.com</td>
<td nowrap="">24-04-2015 11.28</td>
<td align="center"> </td></tr>
<tr><td><a href="http://abc.gov.com/comments/24-April/abc.html">some data</a></td>
我可以清楚地看到电子邮件列在&lt; 和&gt; 标记之间。我正在尝试使用正则表达式来识别所有电子邮件并打印它们。但是,在执行时,不是只提取电子邮件(每行一封电子邮件),而是打印整个文件。
我该如何解决这个问题?
【问题讨论】:
-
我完全看不懂你的代码。为什么要使用
urllib2打开本地文件?只需使用with open("/path/to/file.html") as f: soup = BeautifulSoup(f)。接下来,您希望raw_input(soup)做什么?最后,为什么刚开始使用 HTML 解析器时要对文本进行正则表达式搜索? -
@MattDMo:啊,是的,先生。可以简单地打开它。不知道 raw_input 接受用户的输入。我假设它将把汤变量解析成一个字符串。如果没有 raw_input 行,我收到一条错误消息,指出 re.findall 函数需要一个字符串作为字符串中的第二个参数
标签: python parsing web-scraping beautifulsoup