Linux 抓取网页实例(shell+awk)

从接到通知到面试,准备了三天的面试,暂告一段落,先谈点心得体会吧 ^_^

这次面试流程跟两年前差不多,先考察算法,然后测试功底,最后是综合素质,可惜我准备的方向错了,只准备了最近一年做的几个android项目,木准备算法( ⊙ o ⊙ )!

算法很考察技巧,小脑袋转不到点子上就很难想到,心里直扑通扑通,还好面试官特别特别特别的好~~ \(^o^)/~

自己最大的弱点是测试经验不足,面试最大的收获是用一面考官给的测试方法解决了二面考官的测试问题,师夷长技以自强嘛。。。哈

不管结果如何吧。。。今天的失败不要紧,要紧的是快速再学习的能力,相信只要自己每天积累一点点,总有一天小溪流终会聚成江河,直奔大海。。。



上一篇博客讲了Linux抓取网页的方式,有curl和wget两种方式,这篇将重点讲Linux抓取网页的实例——抓取google play全球12国的游戏TOP排名

要抓取google play游戏排名网页,首先需要分析网页的特点和规律:

1、google play游戏排名网页,是一个就“总-分”形式,即一页网址显示若干排名(如24个),有若干个网页组成全部游戏总排名

2、每页网址中,点击每个单独的游戏连接,可以查看本游戏的属性信息(如评价星级、发布日期、版本号、SDK版本号、游戏类别、下载量等)


需要解决的问题:

1、如何抓取全部游戏总排名?

2、抓取到总排名后,如何拼接URL来抓取每个单独的游戏网页?

3、抓取到每个单独游戏网页后,如何提取网页中游戏的属性信息(即评价星级、发布日期。。。)?

4、提取到了每个单独游戏属性信息后,如何保存(mysql)、生成每日报表(html)、发送每日报表(email)?

5、根据抓取的游戏属性信息资源,如何查询自己公司的游戏排名(JSP)、如何清晰的展现游戏排名(JFreeChart图表)?

6、更难的是,google play游戏排名,并没有全球统一的排名,google采用本地化策略,几十个国家都有自己的一套排名算法和规则,如何实现12国游戏排名?


分析完这些问题后,如何逐一解决,各个击破,便是需要我们思考、设计和解决的问题(模块流程和技术实现)?




阅读更多
换一批

linux c socket编程抓取网页的问题

10-17

最近在学习linux的网络编程,从网上找了分抓取网页的代码,但是不知为什么不能够获取整个网页rn代码如下:rn[code=C/C++]rn[#include rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define HTTPPORT 80rnrnchar *head = "GET /about HTTP/1.1\r\n"rn "Accept: */*\r\n"rn "Accept-Language:zh-cn\r\n"rn "Accept-Encoding:gzip,deflate\r\n"rn "Host:www.ietf.org\r\n"rn "Connection:Keep-Alive\r\n\n";rnint connect_URL(char *domain,int port)rnrn int sock;rn struct hostent *host;rn struct sockaddr_in server;rn host = gethostbyname(domain);rn if(host == NULL)rn rn printf("gethostbyname error\n");rn return -2;rn rnrn sock = socket(AF_INET,SOCK_STREAM,0);rn if(sock < 0)rn rn printf("invalid socket\n");rn return -1;rn rn memset(&server,0,sizeof(struct sockaddr_in));rn memcpy(&server.sin_addr,host->h_addr_list[0],host->h_length);rn server.sin_family = AF_INET;rn server.sin_port = htons(port);rn if(connect(sock,(struct sockaddr *) &server,sizeof(struct sockaddr)) < 0 )rn return -1;rn else rn return sock;rnrnrnint main()rnrn int sock;rn int n;rn char buf[1024];rn char *domain ="www.ietf.org";rn FILE *fp;rn rn fp = fopen("test.txt","w");rn if(NULL == fp)rn rn printf("can't open stockcode file\n");rn return -1;rn rn sock = connect_URL(domain,HTTPPORT);rn if(sock < 0)rn rn printf("connect errror\n");rn return -1;rn rnrn send(sock,head,strlen(head),0);rn while(1)rn rn if((n=recv(sock,buf,1024,MSG_WAITALL)) < 1)rn break;rn printf("%d\n",n);rn fprintf(fp,"%s",buf);rn rn fclose(fp);rn close(sock);rn printf("bye\n");rn return 0;rnrnrn rn/code]rn求大神指导

没有更多推荐了,返回首页