Linux C++ 简单爬虫
转载:http://blog.csdn.net/orthocenterchocolate/article/details/38665937
方便易用,传入URL,返回对应页面的内容
- #include <iostream>
- #include <string>
- #include <netdb.h>
- #include <string.h>
- #include <stdlib.h>
- using namespace std;
- void parseHostAndPagePath(const string url, string &hostUrl, string &pagePath){
- hostUrl=url;
- pagePath="/";
- int pos=hostUrl.find("http://");
- if(-1!=pos)
- hostUrl=hostUrl.replace(pos,7,"");
- pos=hostUrl.find("https://");
- if(-1!=pos)
- hostUrl=hostUrl.replace(pos,8,"");
- pos=hostUrl.find("/");
- if(-1!=pos){
- pagePath=hostUrl.substr(pos);
- hostUrl=hostUrl.substr(0,pos);
- }
- }
- string getPageContent(const string url){
- struct hostent *host;
- string hostUrl, pagePath;
- parseHostAndPagePath(url, hostUrl, pagePath);
- if(0==(host=gethostbyname(hostUrl.c_str()))){
- cout<<"gethostbyname error\n"<<endl;
- exit(1);
- }
- struct sockaddr_in pin;
- int port=80;
- bzero(&pin,sizeof(pin));
- pin.sin_family=AF_INET;
- pin.sin_port=htons(port);
- pin.sin_addr.s_addr=((struct in_addr*)(host->h_addr))->s_addr;
- int isock;
- if((isock = socket(AF_INET, SOCK_STREAM, 0))==-1){
- cout<<"open socket error\n"<<endl;
- exit(1);
- }
- string requestHeader;
- requestHeader="GET "+pagePath+" HTTP/1.1\r\n";
- requestHeader+="Host: "+hostUrl+"\r\n";
- requestHeader+="Accept: */*\r\n";
- requestHeader+="User-Agent: Mozilla/4.0(compatible)\r\n";
- requestHeader+="connection:Keep-Alive\r\n";
- requestHeader+="\r\n";
- if(connect(isock, (const sockaddr*)&pin, sizeof(pin))==-1){
- cout<<"connect error\n"<<endl;
- exit(1);
- }
- if(send(isock, requestHeader.c_str(), requestHeader.size(), 0)==-1){
- cout<<"send error\n"<<endl;
- exit(1);
- }
- struct timeval timeout={1,0};
- setsockopt(isock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval));
- char c;
- bool flag=true;
- while(recv(isock, &c, 1, 0)>0){
- if('\r'==c){
- continue;
- }else if('\n'==c){
- if(false==flag)
- break;
- flag=false;
- }else{
- flag=true;
- }
- }
- int len, BUFFER_SIZE=512;
- char buffer[BUFFER_SIZE];
- string pageContent="";
- while((len = recv(isock, buffer, BUFFER_SIZE-1, 0))>0){
- buffer[len]='\0';
- pageContent+=buffer;
- }
- return pageContent;
- }
- int main()
- {
- cout<<getPageContent("http://www.hao123.com")<<endl;
- return 0;
- }
Linux C++ 简单爬虫相关推荐
- python简单实践作业_【Python】:简单爬虫作业
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
- 实现一个go语言的简单爬虫来爬取CSDN博文(一)
http://blog.csdn.net/tyBaoErGe/article/details/50375802?hmsr=studygolang.com&utm_medium=studygol ...
- Python简单爬虫入门-爬取链家租房网上的租房信息
.又到了毕业季,租房成为广大毕业生关注的话题,考虑到只用到广州的租房信息,所以只爬取广州各个地区的租房信息,下面是用Python3.4.4编写简单爬虫爬取租房网信息的代码: #coding:utf-8 ...
- linux 定时任务 (python 爬虫统计博客数据)
linux 定时任务 (python 爬虫统计博客数据) 1. 任务目标 定时任务中,每天统计一下今日博客的各项数据,并以邮件的形式发送给自己. 2. linux 定时任务 (python) 一切复杂 ...
- python_2开发简单爬虫
2017年12月03日 16:43:01 独行侠的守望 阅读数:204 标签: python爬虫 更多 个人分类: Python 编辑 版权声明:本文为博主原创文章,转载请注明文章链接. https: ...
- Golang实现简单爬虫框架(4)——队列实现并发任务调度
前言 在上一篇文章<Golang实现简单爬虫框架(3)--简单并发版>中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Wor ...
- 39条常见的Linux系统简单面试题
39条常见的Linux系统简单面试题 本文主要分享39条常见的Linux系统简单面试题,其中包括如何看当前Linux系统有几颗物理CPU和每颗CPU的核数.如何实时查看网卡流量为多少等等,希望对你有所 ...
- Linux下简单的邮件服务器搭建
Linux下简单的邮件服务器搭建 电子邮件服务简介 电子邮件是因特网上最为流行的应用之一,而邮件服务器是一种用来负责电子邮件收发管理的设备,它构成了电子邮件系统的核心. 电子邮件系统的组成 MUA( ...
- 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...
最新文章
- matlab打开显示系统错误,win7系统笔记本运行Matlab软件弹出已停止工作错误窗口的解决方法...
- 恭喜!神策数据荣获“2020 InfoQ 最佳技术社区驱动力奖”
- Deepin/Linux系统使用GUFW可视化管理、配置防火墙规则
- cf1553C. Penalty
- cuda tensorflow版本对应_Windows10下安装tensorflow-gpu(2.2.0)安装教程(避坑+保姆式教学)...
- Mac安装masscan【亲测有用】
- 面试问sql优化怎么回答
- 搭建Hadoop2.6.4伪分布式
- graphicsmagick常用命令
- fm核武破解 java出错_java.lang.UnsupportedClassVersionError 错误的原因
- python都被我用来爬美女图片了
- 计算机应用与基础app,手机APP支持下《计算机应用基础》课程探究性学习活动设计与实验研究...
- 三级分销系统哪家好?360shop
- Word学习笔记-使用技巧
- Groovy 和 Java 联合开发环境搭建
- 服务器后台设计与大型网站设计,「大型网站架构设计」—— 前言
- Windows聚焦功能失效怎么办?
- ActiveSkin 4.3 软件换肤
- java毕业生设计高校教材征订管理系统计算机源码+系统+mysql+调试部署+lw
- 《月亮与六便士》-- 威廉·萨默塞特·毛姆
热门文章
- C++ namespace
- HDU 5371 Manacher Hotaru's problem
- idhttp.post方式 调用datasnap rest 远程方法
- 萧山职称计算机考试培训,浙江萧山2017年职称计算机考试时间安排
- c 语言输出指针的值,C 语言指针
- 获取clientheight为0_用10行python代码获取全国城市交通生活圈
- java接口开发_如果你想学好Java,这些你需要了解
- http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...
- PL/SQL Developer跑在Oracle 64位数据库上初始化错误
- php进程间通信 yoc_续上篇Swoole多进程数据共享的问题