2015-03-25 2 views
0

Я пытаюсь разобрать электронные письма с веб-страницы. мой код:Как разобрать письма с mailto urls в Python

  import urllib2,cookielib 
      import re 

      site= "http://www.traidnt.net/vb/traidnt207743" 
      hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
        'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 
        'Accept-Encoding': 'none', 
        'Accept-Language': 'en-US,en;q=0.8', 
        'Connection': 'keep-alive'} 

      req = urllib2.Request(site, headers=hdr) 

      page = urllib2.urlopen(req) 

      content = page.read() 

      links = re.findall('mailto:[email protected]+.', content) 

      for link in links: 
       print link[7:-1] 

и результат пришел как:

[email protected] 
[email protected] 
[email protected] 
... 

, но мне нужно, чтобы получить все письма с полной форме. Пожалуйста, как я могу сделать это, чтобы получить полную форму всех электронных писем.

Спасибо!

+0

Я думаю, что вам нужно регулярное выражение, соответствующее адресам электронной почты: http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address –

ответ

0

Я просто добавил следующий код в свой код и он отлично работает:

regexp = re.compile(("mailto:([a-z0-9!#$%&'*+\/=?^_`{|}~-][email protected][a-z0-9]+\.[a-zA-Z0-9-.]+)")) 

links = re.findall(regexp, content) 

print links 

Выход:

['[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]'] 
+1

Регулярное выражение youre дать недостаточно. В качестве примера он будет пропускать дешёвые доменные имена, такие как «foo-bar.com». Очевидно, что в этой строке есть множество переполнений стека, http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address и http: // stackoverflow. com/questions/8022530/python-check-for-valid-email-address (я бы сделал регулярное выражение из последнего '[^ @ \ s] + @ [^ @ \ s] + \. [^ @ \ s] + ', чтобы исключить пробел, но общая точка стоит) – bmhkim

+0

@ hugo-sousa @bmhkim его не работает на большинстве веб-сайтов. например, этот сайт 'http: //www.hotm-il.com/vb/showthread.php? t = 18249' – yuyb0y

+0

Hummm, вы пытались удалить« mailto: »? –

0

Вы shold использовать специальную библиотеку так

https://pypi.python.org/pypi/urlinfo

и внести свой вклад и создать проблему, чтобы улучшить Python;)