鉴于一个网站,我想知道什么是最好的程序,以编程方式和/或使用脚本,从该链接和所有网站以XXXX@YYYYY.ZZZZ格式提取纯文本中每个页面上的所有电子邮件地址在下面,递归或直到一些固定的深度。
答案 0 :(得分:14)
使用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 ),以递归方式获取所有页面( -r ),最大深度级别为5(来自somesite.com.br的 -l 5 )并将所有内容打印到stdout( -O - )。
grep 正在使用扩展正则表达式( -E )并仅显示( -o )电子邮件地址。
所有电子邮件都将打印到标准输出,您可以通过将> somefile.txt
附加到命令来将它们写入文件。
本例使用GNU bash版本4.2.37(1)-release,GNU grep 2.12和GNU Wget 1.13.4进行测试。
答案 1 :(得分:7)
首先使用wget
以递归方式从URL下载页面。 -l
选项是回归深度,设置为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 -
)可以将下载的内容打印到stdout而不是将其保存到磁盘,但遗憾的是,它不能用于递归({{1} })模式。
答案 2 :(得分:0)
我会使用wget递归地获取页面,然后使用正则表达式找到地址(我本来会使用python script,但几乎任何环境都可以提供相同的功能)。
答案 3 :(得分: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&
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. :(";
}
?>