免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhoulifa

[原创] 用 C 语言编写一个网络蜘蛛来搜索网上出现的电子邮件地址 [复制链接]

论坛徽章:
0
发表于 2006-09-10 14:04 |显示全部楼层
原帖由 yancncen 于 2006-9-8 23:43 发表
建议楼主在检查是否已经爬取过的网站的时候可以采用hash的方法,larbin是这样做的,我觉得那样更简单高效.


谢谢,我已经下载了larbin,正在准备学习它的代码
往后如果想把这个程序做好点我肯定会参考larbin, nutch等先进代码的

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
发表于 2006-09-10 14:16 |显示全部楼层
C写的 爬虫 赞一个!

论坛徽章:
0
发表于 2006-09-10 22:07 |显示全部楼层
呵呵,我做过一些相关的项目,从以前闭源的Tornado到后来的Lucene还有Nutch,都用过一些。如果问如何知道的?这得问Google,呵呵。

另外强烈不推荐 RedHat 作为开发平台,我个人使用 Gentoo Linux,不过如果你用于开发的话,我推荐的顺序是:FreeBSD/Debian/Slackware

论坛徽章:
0
发表于 2006-09-10 23:14 |显示全部楼层
原帖由 zhoulifa 于 2006-9-10 14:04 发表


谢谢,我已经下载了larbin,正在准备学习它的代码
往后如果想把这个程序做好点我肯定会参考larbin, nutch等先进代码的

可以基于larbin或者其他开源系统再做开发.

论坛徽章:
0
发表于 2006-09-11 10:40 |显示全部楼层
/**************************************************************
功能:从 src 中找出前面的字母、数字等内含,即 email 地址中 @ 的前面部分
***************************************************************/
void GetBeforePos(char * src, char ** d)
{
        char * x;
        if(src - 1)        x = src - 1;
        else {*d = 0; return ;}
        while(x)        {
                if(*x >= 'a' && *x <= 'z') {x--; continue;}
                else if(*x >= 'A' && *x <= 'Z') {x--; continue;}
                else if(*x >= '0' && *x <= '9') {x--; continue;}
                else if(*x == '.' || *x == '-' || *x == '_') {x--; continue;}
                else {break;}
        }
        x++;
        if(x) *d = x;
        else *d = 0;
}
不知道这个是什么意思?

论坛徽章:
0
发表于 2006-09-11 17:20 |显示全部楼层
原帖由 zliming 于 2006-9-11 10:40 发表
/**************************************************************
功能:从 src 中找出前面的字母、数字等内含,即 email 地址中 @ 的前面部分
*********************************************************** ...


试一下下面的代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>

  4. void GetBeforePos(char * src, char ** d)
  5. {
  6.   char * x;
  7.   if(src - 1)  x = src - 1;
  8.   else {*d = 0; return ;}
  9.   while(x)  {
  10.     if(*x >= 'a' && *x <= 'z') {x--; continue;}
  11.     else if(*x >= 'A' && *x <= 'Z') {x--; continue;}
  12.     else if(*x >= '0' && *x <= '9') {x--; continue;}
  13.     else if(*x == '.' || *x == '-' || *x == '_') {x--; continue;}
  14.     else {break;}
  15.   }
  16.   x++;
  17.   if(x) *d = x;
  18.   else *d = 0;
  19. }

  20. int main(int argc, char ** argv)
  21. {
  22.   char * p;
  23.   char * at;
  24.   if(argc != 2)  {
  25.     printf("1 参数个数不对,请输入一个参数,若有空格请用引号,比如:%s \"mailto: zhoulifa@163.com\"", argv[1]);
  26.     exit(1);
  27.   }
  28.   at = strchr(argv[1], '@');
  29.   if(!at)  {
  30.     printf("2 参数不对,请输入包含 @ 符号的参数,比如:%s \"mailto:zhoulifa@163.com\"", argv[1]);
  31.     exit(2);
  32.   }
  33.   GetBeforePos(at, &p);
  34.   *at = 0;
  35.   printf("邮件地址前面部分为:%s\n", p);
  36.   return 0;
  37. }
复制代码


保存此程序为GetBefore.c,然后编译并运行它,如下:
test@local:/source/example/c$ gcc GetBefore.c -Wall -g
test@local:/source/example/c$ ./a.out "mail: zhoulifa@163.com"
邮件地址前面部分为:zhoulifa
test@local:/source/example/c$ ./a.out "mail:zhoulifa@163.com"
邮件地址前面部分为:zhoulifa
test@local:/source/example/c$ ./a.out "发邮件至zhoulifa@163.com"
邮件地址前面部分为:zhoulifa


明白了没?
该函数功能就是:
[size=+3]从一个标准电子邮件地址字符串,比如zhoulifa@163.com中,找出@前面部分字符

论坛徽章:
0
发表于 2006-09-11 17:22 |显示全部楼层
goldeagle , yancncen :
    多谢!

论坛徽章:
0
发表于 2006-09-11 22:56 |显示全部楼层
牛人啊。思路很重要呵呵,看了你的程序豁然开朗

论坛徽章:
0
发表于 2006-09-12 08:18 |显示全部楼层
if(src - 1)
while(x)
这样用的没有见过啊.这样子如果这个指针有问题,程序是不是就挂了.

还有这么多的 continue; 是有什么好处啊?
if 自己不是可以对多个条件控制区配吗? if(a || b || c)...不是a满足了就通过 if(a && b && c) 前面的不满足就不检查下一个吗?

只是真的不明白其中的奥秘,不是来捣乱的

还有一个无关紧要的:mail的@前面可以有 '.'号啊

[ 本帖最后由 zliming 于 2006-9-12 08:36 编辑 ]

论坛徽章:
0
发表于 2006-09-12 08:55 |显示全部楼层
这种东西没有一点意义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP