转载:http://blog.csdn.net/orthocenterchocolate/article/details/38665937

方便易用,传入URL,返回对应页面的内容

[cpp] view plain copy
  1. #include <iostream>
  2. #include <string>
  3. #include <netdb.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. using namespace std;
  7. void parseHostAndPagePath(const string url, string &hostUrl, string &pagePath){
  8. hostUrl=url;
  9. pagePath="/";
  10. int pos=hostUrl.find("http://");
  11. if(-1!=pos)
  12. hostUrl=hostUrl.replace(pos,7,"");
  13. pos=hostUrl.find("https://");
  14. if(-1!=pos)
  15. hostUrl=hostUrl.replace(pos,8,"");
  16. pos=hostUrl.find("/");
  17. if(-1!=pos){
  18. pagePath=hostUrl.substr(pos);
  19. hostUrl=hostUrl.substr(0,pos);
  20. }
  21. }
  22. string getPageContent(const string url){
  23. struct hostent *host;
  24. string hostUrl, pagePath;
  25. parseHostAndPagePath(url, hostUrl, pagePath);
  26. if(0==(host=gethostbyname(hostUrl.c_str()))){
  27. cout<<"gethostbyname error\n"<<endl;
  28. exit(1);
  29. }
  30. struct sockaddr_in pin;
  31. int port=80;
  32. bzero(&pin,sizeof(pin));
  33. pin.sin_family=AF_INET;
  34. pin.sin_port=htons(port);
  35. pin.sin_addr.s_addr=((struct in_addr*)(host->h_addr))->s_addr;
  36. int isock;
  37. if((isock = socket(AF_INET, SOCK_STREAM, 0))==-1){
  38. cout<<"open socket error\n"<<endl;
  39. exit(1);
  40. }
  41. string requestHeader;
  42. requestHeader="GET "+pagePath+" HTTP/1.1\r\n";
  43. requestHeader+="Host: "+hostUrl+"\r\n";
  44. requestHeader+="Accept: */*\r\n";
  45. requestHeader+="User-Agent: Mozilla/4.0(compatible)\r\n";
  46. requestHeader+="connection:Keep-Alive\r\n";
  47. requestHeader+="\r\n";
  48. if(connect(isock, (const sockaddr*)&pin, sizeof(pin))==-1){
  49. cout<<"connect error\n"<<endl;
  50. exit(1);
  51. }
  52. if(send(isock, requestHeader.c_str(), requestHeader.size(), 0)==-1){
  53. cout<<"send error\n"<<endl;
  54. exit(1);
  55. }
  56. struct timeval timeout={1,0};
  57. setsockopt(isock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval));
  58. char c;
  59. bool flag=true;
  60. while(recv(isock, &c, 1, 0)>0){
  61. if('\r'==c){
  62. continue;
  63. }else if('\n'==c){
  64. if(false==flag)
  65. break;
  66. flag=false;
  67. }else{
  68. flag=true;
  69. }
  70. }
  71. int len, BUFFER_SIZE=512;
  72. char buffer[BUFFER_SIZE];
  73. string pageContent="";
  74. while((len = recv(isock, buffer, BUFFER_SIZE-1, 0))>0){
  75. buffer[len]='\0';
  76. pageContent+=buffer;
  77. }
  78. return pageContent;
  79. }
  80. int main()
  81. {
  82. cout<<getPageContent("http://www.hao123.com")<<endl;
  83. return 0;
  84. }

Linux C++ 简单爬虫相关推荐

  1. python简单实践作业_【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  2. 实现一个go语言的简单爬虫来爬取CSDN博文(一)

    http://blog.csdn.net/tyBaoErGe/article/details/50375802?hmsr=studygolang.com&utm_medium=studygol ...

  3. Python简单爬虫入门-爬取链家租房网上的租房信息

    .又到了毕业季,租房成为广大毕业生关注的话题,考虑到只用到广州的租房信息,所以只爬取广州各个地区的租房信息,下面是用Python3.4.4编写简单爬虫爬取租房网信息的代码: #coding:utf-8 ...

  4. linux 定时任务 (python 爬虫统计博客数据)

    linux 定时任务 (python 爬虫统计博客数据) 1. 任务目标 定时任务中,每天统计一下今日博客的各项数据,并以邮件的形式发送给自己. 2. linux 定时任务 (python) 一切复杂 ...

  5. python_2开发简单爬虫

    2017年12月03日 16:43:01 独行侠的守望 阅读数:204 标签: python爬虫 更多 个人分类: Python 编辑 版权声明:本文为博主原创文章,转载请注明文章链接. https: ...

  6. Golang实现简单爬虫框架(4)——队列实现并发任务调度

    前言 在上一篇文章<Golang实现简单爬虫框架(3)--简单并发版>中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Wor ...

  7. 39条常见的Linux系统简单面试题

    39条常见的Linux系统简单面试题 本文主要分享39条常见的Linux系统简单面试题,其中包括如何看当前Linux系统有几颗物理CPU和每颗CPU的核数.如何实时查看网卡流量为多少等等,希望对你有所 ...

  8. Linux下简单的邮件服务器搭建

    Linux下简单的邮件服务器搭建 电子邮件服务简介 电子邮件是因特网上最为流行的应用之一,而邮件服务器是一种用来负责电子邮件收发管理的设备,它构成了电子邮件系统的核心. 电子邮件系统的组成  MUA( ...

  9. 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法

    在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...

最新文章

  1. matlab打开显示系统错误,win7系统笔记本运行Matlab软件弹出已停止工作错误窗口的解决方法...
  2. 恭喜!神策数据荣获“2020 InfoQ 最佳技术社区驱动力奖”
  3. Deepin/Linux系统使用GUFW可视化管理、配置防火墙规则
  4. cf1553C. Penalty
  5. cuda tensorflow版本对应_Windows10下安装tensorflow-gpu(2.2.0)安装教程(避坑+保姆式教学)...
  6. Mac安装masscan【亲测有用】
  7. 面试问sql优化怎么回答
  8. 搭建Hadoop2.6.4伪分布式
  9. graphicsmagick常用命令
  10. fm核武破解 java出错_java.lang.UnsupportedClassVersionError 错误的原因
  11. python都被我用来爬美女图片了
  12. 计算机应用与基础app,手机APP支持下《计算机应用基础》课程探究性学习活动设计与实验研究...
  13. 三级分销系统哪家好?360shop
  14. Word学习笔记-使用技巧
  15. Groovy 和 Java 联合开发环境搭建
  16. 服务器后台设计与大型网站设计,「大型网站架构设计」—— 前言
  17. Windows聚焦功能失效怎么办?
  18. ActiveSkin 4.3 软件换肤
  19. java毕业生设计高校教材征订管理系统计算机源码+系统+mysql+调试部署+lw
  20. 《月亮与六便士》-- 威廉·萨默塞特·毛姆

热门文章

  1. C++ namespace
  2. HDU 5371 Manacher Hotaru's problem
  3. idhttp.post方式 调用datasnap rest 远程方法
  4. 萧山职称计算机考试培训,浙江萧山2017年职称计算机考试时间安排
  5. c 语言输出指针的值,C 语言指针
  6. 获取clientheight为0_用10行python代码获取全国城市交通生活圈
  7. java接口开发_如果你想学好Java,这些你需要了解
  8. http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...
  9. PL/SQL Developer跑在Oracle 64位数据库上初始化错误
  10. php进程间通信 yoc_续上篇Swoole多进程数据共享的问题