使用脚本从网站提取电子邮件地址

Ope*_*way 4 email bash web

给定一个网站,我想知道什么是最好的程序,以编程方式和/或使用脚本,从该链接和下面的所有网站以递归方式提取每个页面上的所有电子邮件地址,格式为XXXX@YYYYY.ZZZZ或直到一些固定的深度.

小智 14

使用shell编程,您可以使用管道连接的2个程序实现目标:

  • wget:将获取所有页面
  • grep:将过滤并仅为您提供电子邮件

一个例子:

wget -q -r -l 5 -O - http://somesite.com/ | grep -E -o "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b"
Run Code Online (Sandbox Code Playgroud)

wget的,在安静模式(-q),越来越所有页面递归(-r用的最多5个深度级别()-l 5从somesite.com.br)和打印一切标准输出(-O - ).

grep使用扩展正则表达式(-E)并仅显示(-o)电子邮件地址.

所有电子邮件都将打印到标准输出,您可以通过附加> somefile.txt到命令将它们写入文件.

阅读man页面以获取有关wgetgrep的更多文档.

此示例使用GNU bash版本4.2.37(1)-release,GNU grep 2.12和GNU Wget 1.13.4进行测试.


dog*_*ane 7

首先用于wget递归下载URL中的页面.该-l选项是recusion深度设置为1以下:

$ mkdir site
$ cd site
$ wget -q -r -l1  http://www.foobar.com
Run Code Online (Sandbox Code Playgroud)

然后运行递归grep以提取电子邮件地址.(下面的正则表达式并不完美,如果您发现并非所有地址都被拾取,可能需要进行调整.)

$ grep -hrio "\b[a-z0-9.-]\+@[a-z0-9.-]\+\.[a-z]\{2,4\}\+\b" *
Run Code Online (Sandbox Code Playgroud)

顺便说一句,wget确实有一个选项(-O -)将下载的内容打印到stdout而不是将其保存到磁盘但不幸的是,它在递归(-r)模式下不起作用.