6

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

4

4 回答 4

19

使用 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"

wget在安静模式 ( -q ) 下,从 somesite.com.br以最大深度级别 5 ( -l 5 )递归 ( -r ) 获取所有页面,并将所有内容打印到标准输出 ( -O - )。

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

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

阅读有关wgetgrepman的更多文档的页面。

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

于 2013-01-29T19:05:36.043 回答
10

首先用于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

于 2012-12-13T11:47:00.703 回答
0

我会使用wget递归地获取页面,然后使用正则表达式定位地址(我会为此使用python 脚本,但几乎任何环境都可以提供相同的功能)。

于 2012-12-13T11:02:08.440 回答
0

第 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&amp;
    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:&#114;&#105;&#115;&#104;&#97;&#98;&#104;&#100;&#117;&#98;&#101;&#121;&#50;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">
    </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. :(";
    }

    ?>
于 2016-06-04T17:04:38.793 回答