У меня есть дамп данных, из которого я пытаюсь извлечь все электронные письма.Извлечь электронные письма из дампа данных с помощью Python
Это код, который я написал, используя 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 <[email protected]></td>
<td>[email protected]</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 <[email protected]></td>
<td>[email protected]</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 <[email protected]></td>
<td>[email protected]</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>
я могу ясно видеть, что письма перечислены между <
и >
тегом. Я пытаюсь использовать регулярное выражение для идентификации всех электронных писем и их печати. Однако при выполнении вместо того, чтобы извлекать электронные письма (по одному электронному письму на строку), весь файл печатается.
Как это исправить?
Я не понимаю ваш код вообще. Почему вы используете 'urllib2' для открытия локального файла? Просто используйте 'open ("/path/to/file.html ") как f: soup = BeautifulSoup (f)'. Далее, что вы ожидаете от 'raw_input (soup)'? Наконец, почему вы выполняете регулярный поиск текста, когда вы только начинаете использовать парсер HTML? – MattDMo
@MattDMo: Ах, да, вы правы, сэр. Возможно, просто открыл его. Не знаю, что raw_input берет вход пользователя. Я был в предположении, что он будет разбирать переменную супа в строку. Без строки raw_input появляется сообщение о том, что функция re.findall ожидает строку в качестве второго параметра в строке – Piyush