【发布时间】:2021-03-19 03:51:25
【问题描述】:
我正在尝试结合使用请求和 re 模块从某些网站的登录页面捕获电子邮件地址。这是我在脚本中用来捕获它们的模式[\w\.-]+@[\w\.-]+。
当我运行脚本时,我确实得到了电子邮件地址。但是,我也收到了一些类似于电子邮件地址的不需要的东西,但实际上它们不是,因此我想摆脱它们。
import re
import requests
links = (
'http://www.acupuncturetx.com',
'http://www.hcmed.org',
'http://www.drmindyboxer.com',
'http://wendyrobinweir.com',
)
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
for link in links:
r = requests.get(link,headers=headers)
emails = re.findall(r"[\w\.-]+@[\w\.-]+",r.text)
print(emails)
当前输出:
['react@16.5.2', 'react-dom@16.5.2', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com']
['hh-logo@2x.png', 'hh-logo@2x.png', 'hh-logo@2x.png', 'hh-logo@2x-300x47.png']
['leaflet@1.7.1']
['8b4e078a51d04e0e9efdf470027f0ec1@sentry.wixpress.com', 'requirejs-bolt@2.3.6', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wixstores-client-cart-icon@1.797.0', 'wixstores-client-gallery@1.1634.0']
预期输出:
['bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com', 'bai@acupuncturetx.com']
[]
[]
['wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com', 'wendyrobin16@gmail.com']
我怎样才能只捕获电子邮件地址并使用正则表达式删除不需要的东西?
【问题讨论】:
-
这里是根据 ICANN data.iana.org/TLD/tlds-alpha-by-domain.txt 的所有有效 TLD。您只需将它们全部添加到最后,例如
[\w\.-]+@[\w\.-]+\.(?:aaa|aarp|abarth|abb|abbott)(?:[^\w\.-]|$) -
fyi,
email@ip_address也是有效的电子邮件,但如果您不希望遇到这些,则可以忽略此评论。
标签: python python-3.x regex web-scraping