当前位置:首 页 > 技术文章 > 原创 > 详细

利用ajax实现简单的邮箱采集器[二]

字号字号

摘要:接上一篇利用ajax实现简单的邮箱采集器[一]。在上一篇中,我们已经实现从百度获取相关关键字的搜索结果链接,现在需要通过请求获取到的链接来捕获我们感兴趣的内容。当然我们现在主要是做邮箱采集,所以我们当然对邮箱感兴趣了,呵呵!上一篇说过,需要你有javascript的基本编程以及对ajax和正则表达式……

接上一篇利用ajax实现简单的邮箱采集器[一]

在上一篇中,我们已经实现从百度获取相关关键字的搜索结果链接,现在需要通过请求获取到的链接来捕获我们感兴趣的内容。当然我们现在主要是做邮箱采集,所以我们当然对邮箱感兴趣了,呵呵!

上一篇说过,需要你有javascript的基本编程以及对ajax和正则表达式的相关知识。

这篇文章主要的内容是如何从一个普通的文本内容中提取电子邮箱模式的字符串,所以我们来分析一下电子邮箱的模式和正则表达式的构造:电子邮箱的模式是:“用户名@域名”,以一个虚拟的126邮箱为例,“126.com”是域名,假设用户名是user123”,那么一个完整的邮箱模式就是“user123@126.com”。大部分邮件服务商的用户名只允许是数字或字母或数字和字母的组合以及横杠“-”等字符,也有部分邮件服务商允许用户名中有点“.”号,一般2-30个字符为限,而域名有地区域名,如:.cn/.com.cn/.hk/.com.hk/.tw/.com.tw等。

了解了电子邮箱模式,那么我们就可以编写一个获取该具有该模式内容的正则表达式,关于正则表达式我就不多介绍了,不了解的朋友可以自己去找这方面的资料,呵呵!

捕获电子邮箱的js正则表达式: /[\w][\w\.-]{0,28}[\w]@\w{2,20}(\.[a-zA-Z]{2,5}){1,2}/g

我们现在已经知道电子邮箱的模式并写出了捕获它的正则表达式,那么我们在上一篇的基础上添加几个步骤的处理函数就可以完成一个简单的邮箱采集器了。

在上一篇中我们已经从百度获取到了相关关键词搜索结果的链接并存放在页面中的一个id="result"的textarea中,现在只需要再用ajax和上面的表达式来处理这些链接即可。

看代码(接上一篇):

JavaScript Code复制内容到剪贴板
  1. var liks=[];//从百度得到的链接数组   
  2. var link_curr=0;//当前链接索引   
  3. var link_max=0;//最大链接索引   
  4. var link_flag=false;//是否已经返回   
  5. var link_timer=null;//定时器   
  6. var link_speed=1000;//请求速度1秒   
  7. var link_url="";//请求页面地址   
  8.   
  9. //根据链接捕获邮箱   
  10. function getEmailByLink()   
  11. {   
  12.   // $("status").innerHTML="<font color='#0000ff'>"+url+"</font> 打开连接,请求中……";   
  13.   var txt=$("result").value;//从百度得到的链接内容   
  14.   if(txt!="")   
  15.   {   
  16.      $("html").value=txt.replace(/(^\s*)|(\s*$)/g,"");//将从百度得到的链接放到id="html"的textarea中   
  17.      $("result").value="";//清空id="result"的textarea的内容[用来放置捕获到的内容]   
  18.      links=txt.match(/.+/g);//从txt获取链接数组[在正则表达式中点“.”号不匹配换行,而txt中各个链接是用换行分隔的]   
  19.      link_max=links.length;//最大链接索引   
  20.      get_email();//开始循环请求链接获取电子邮箱   
  21.   }   
  22.   else  
  23.   {   
  24.      alert("没有可用的链接!");   
  25.   }   
  26. }   
  27. //循环请求链接获取电子邮箱   
  28. function get_email()   
  29. {   
  30.    if(link_curr<link_max)   
  31.    {   
  32.        ajax_email(links[link_curr]);//请求链接并处理请求结果   
  33.           
  34.         //ajax会有延迟,所以需要循环检查是否已经返回   
  35.        link_timer=setInterval(function (){   
  36.           
  37.          if(link_flag)//如果已经返回   
  38.          {   
  39.             clearInterval(link_timer);//取消循环检查   
  40.             link_falg=false;//标识为未返回   
  41.             link_curr++;//链接索引累加   
  42.             get_email();//重复调用get_email()函数   
  43.          }   
  44.           
  45.       },speed);   
  46.         
  47.    }   
  48.    else  
  49.    {   
  50.       clearInterval(link_timer);//取消循环检查   
  51.       $("status").innerHTML=link_max+"/"+link_max+" 程序运行结束……";   
  52.       $("result").select();   
  53.    }   
  54. }   
  55. //ajax请求可能包含有邮箱模式的页面   
  56. function ajax_email(url)   
  57. {   
  58.    var ajax=getXMLHttpReq();   
  59.   if(ajax!=null)   
  60.   {   
  61.      ajax.open("get",url,true);   
  62.      ajax.onreadystatechange=callback;//调用下面的回调函数   
  63.      ajax.send(null);   
  64.         
  65.      //回调函数   
  66.      function callback()   
  67.      {   
  68.         $("status").innerHTML=(link_curr+1)+"/"+link_max+" <font color='#0000ff'>"+url+"</font> 打开连接,请求中……";   
  69.         if(ajax.readyState==4)   
  70.         {   
  71.            $("status").innerHTML=(link_curr+1)+"/"+link_max+" <font color='#0000ff'>"+url+"</font> 已经返回……";   
  72.             
  73.            try  
  74.            {   
  75.              var txt=ajax.responseText;   
  76.              //获取电子邮箱模式字符串的正则表达式   
  77.              var reg=/[\w][\w\.-]{0,28}[\w]@\w{2,20}(\.[a-zA-Z]{2,5}){1,2}/g;   
  78.                 
  79.              var arr=txt.match(reg);//捕获   
  80.                 
  81.              if(arr)//捕获到内容   
  82.              {   
  83.                 $("result").value+=arr.join("\n")+"\n";//得到href的值并追加到result中   
  84.              }   
  85.              link_flag=true;//标识为已经返回   
  86.            }   
  87.            catch(error){   
  88.             link_flag=true;//标识为已经返回   
  89.            }   
  90.         }   
  91.      }   
  92.   }else{alert("嗨……你的浏览器是不是过时了?")}   
  93. }  

以“ +'@yahoo.cn'+ ”在为关键字在百度搜索获取搜索结果链接(只翻到第11页)后请求这些链接捕获电子邮箱的运行效果页面:

和预期的一样。一个简单的邮箱采集器就算完成了,是不是很简单呢?呵呵

当然了,现在采集到得邮箱会存在很多的重复,关于去除重复是另外的事了,有兴趣的可以自己加以扩展。

本程序只能在IE浏览器中使用,如果你没有IE浏览器的话那就免试了,呵呵

这是留给你的位置,说出你的真知灼见吧![我要评论][我要收藏][我要举报]
[游客]于[2013-04-24]评论[利用ajax实现简单的邮箱采集器[二]]:

不能用啊

[游客]于[2012-08-28]评论[利用ajax实现简单的邮箱采集器[二]]:

能不能提供直接能用的代码啊?xixi