给定一个网站,我想知道什么是最好的程序,以编程方式和/或使用脚本,以递归方式从该链接和下面的所有站点中以 XXXX@YYYYY.ZZZZ 形式以纯文本形式提取每个页面上存在的所有电子邮件地址或直到某个固定的深度。
4 回答
使用 shell 编程,您可以使用 2 个通过管道连接的程序来实现您的目标:
一个例子:
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"
wget在安静模式 ( -q ) 下,从 somesite.com.br以最大深度级别 5 ( -l 5 )递归 ( -r ) 获取所有页面,并将所有内容打印到标准输出 ( -O - )。
grep使用扩展的正则表达式 ( -E ) 并仅显示 ( -o ) 电子邮件地址。
> somefile.txt
所有电子邮件都将打印到标准输出,您可以通过附加到命令将它们写入文件。
此示例使用 GNU bash版本 4.2.37(1)-release、GNU grep 2.12 和 GNU Wget 1.13.4 进行了测试。
首先用于wget
从 URL 递归下载页面。-l
选项是recusion depth,设置如下1
:
$ mkdir site
$ cd site
$ wget -q -r -l1 http://www.foobar.com
然后运行递归grep
来提取电子邮件地址。(下面的正则表达式并不完美,如果您发现并非所有地址都被提取,可能需要进行调整。)
$ grep -hrio "\b[a-z0-9.-]\+@[a-z0-9.-]\+\.[a-z]\{2,4\}\+\b" *
顺便说一句,wget
确实有一个选项 ( ) 可以将下载的内容打印到标准输出,而不是将其保存到磁盘,但不幸的是,它在递归 ( ) 模式下-O -
不起作用。-r
第 1 点)。开发人员以 HTML 实体格式 (rish) HTML Entity添加电子邮件 ID :
第 2 点)。电子邮件写在 href="mailto:your@example.com" 上。所以我们可以把它当作正则表达式。
<?php
$str = '<div class="call-to-action ">
<a title="Email" class="contact contact-main contact-email "
href="mailto:info@canberraeyelaser.com.au?subject=Enquiry%2C%20sent%20from%20yellowpages.com.au&
body=%0A%0A%0A%0A%0A------------------------------------------%0AEnquiry%20via%20yellowpages.com.au%0Ahttp%3A%2F%2Fyellowpages.com.au%2Fact%2Fphillip%2Fcanberra-eye-laser-15333167-listing.html%3Fcontext%3DbusinessTypeSearch"
rel="nofollow" data-email="info@canberraeyelaser.com.au">
<span class="glyph icon-email border border-dark-blue with-text"></span><span class="contact-text">Email</span>
<a href="mailto:rishabhdubey20@gmail.com">
</a>
</div>';
// $str = file_get_contents(http://example.com) ; (to get emails from URL in place of file_get_contents i use to prefer CURL) .
$str = html_entity_decode($str);
$regex = "/mailto:([^?]*)/";
if ($rex = preg_match_all($regex, $str,$matches_out)) {
echo "Found a match!";
echo "<pre>";
var_dump($matches_out[0]);
} else {
echo "The regex pattern does not match. :(";
}
?>