您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 实验3-信息获取-guide
实验3-信息获取-guideCrawler体系结构,绘图不易,黑板上直接画。使用Boost库完成实验需要了解:一线程1.启动线程#include//使用线程必须包括#include//使用线程同步必须包括#include//如果希望使用bind函数,必须包括#include//如果使用条件变量同步,必须包括……boost::mutexio_mutex;//使用线程同步必须定义全局互斥信号量……Voidhi()//情况a,线程函数不需要传入数据初始化Voidhi(intxxx)//情况b,线程需要传入数据初始化…..intmain(intargc,char*argv[]){//情况a,线程无需传入数据初始化boost::threadthrd(&hi);//情况b,线程需要传入数据初始化,使用bind函数完成boost::threadthrd(boost::bind(&hi,1));thrd.join();return0;}2.线程同步Boost线程库提供了6种互斥体类型,按效率排序如下:boost::mutex,boost::try_mutex,boost::timed_mutex,boost::recursive_mutex,boost::recursive_try_mutex,boost::recursive_timed_mutex实验使用boost::mutex下面是一个简单的线程同步的例子#include//使用线程必须包括#include//使用线程同步必须包括#include//如果使用条件变量同步,必须包括boost::mutexio_mutex;//使用线程同步必须定义全局互斥信号量voidcount(intid){for(inti=0;ihttp_version;unsignedintstatus_code;response_streamstatus_code;std::stringstatus_message;std::getline(response_stream,status_message);if(!response_stream||http_version.substr(0,5)!=HTTP/){std::coutreturn1;}if(status_code!=200){std::coutreturn1;}//Readtheresponseheaders,whichareterminatedbyablankline.boost::asio::read_until(socket,response,\r\n\r\n);//Processtheresponseheaders.std::stringheader;while(std::getline(response_stream,header)&&header!=\r)std::coutstd::cout//Writewhatevercontentwealreadyhavetooutput.if(response.size()0)std::cout//ReaduntilEOF,writingdatatooutputaswego.while(boost::asio::read(socket,response,boost::asio::transfer_at_least(1),error))std::couthttp_version;unsignedintstatus_code;response_streamstatus_code;std::stringstatus_message;std::getline(response_stream,status_message);if(!response_stream||http_version.substr(0,5)!=HTTP/){std::coutreturn;}if(status_code!=200){std::coutstd::coutreturn;}//Readtheresponseheaders,whichareterminatedbyablankline.boost::asio::async_read_until(socket_,response_,\r\n\r\n,boost::bind(&client::handle_read_headers,this,boost::asio::placeholders::error));}else{std::cout}}voidhandle_read_headers(constboost::system::error_code&err){if(!err){//Processtheresponseheaders.std::istreamresponse_stream(&response_);std::stringheader;while(std::getline(response_stream,header)&&header!=\r)std::coutstd::cout//Writewhatevercontentwealreadyhavetooutput.if(response_.size()0)std::cout//StartreadingremainingdatauntilEOF.boost::asio::async_read(socket_,response_,boost::asio::transfer_at_least(1),boost::bind(&client::handle_read_content,this,boost::asio::placeholders::error));}else{std::cout}}voidhandle_read_content(constboost::system::error_code&err){if(!err){//Writeallofthedatathathasbeenreadsofar.std::couttagName().c_str(),A)==0){it-parseAttributes();cout}}//Dumpalltextofthedocumentit=dom.begin();end=dom.end();for(;it!=end;++it){if((!it-isTag())&&(!it-isComment())){cout}}cout四url解析url的解析也有几种方法:boost.regex进行正则解析;直接进行字符串分析;使用库。推荐使用google-url库,该库提供四层用法,建议使用第四层,直接使用其提供的uri对象。Google-url使用方法见其说明文件,很简单。五网页存储按课件中所讲天网格式保存。六算法1.遍历算法各位自己确定,广度还是深度优先,或者综合考虑。建议广度为基础,结合网页重要度估算算法。2.网页查重直接采用课件中所讲算法,当然也鼓励采用其它算法。3.网页去噪有余力的同学可以尝试网页去噪,课件及所给阅读资料已经对此有基本说明,自定算法。Htmlcxx库可以生成网页的dom结构,如需网页去噪,可以使用该库作为编程基础。4.聚焦爬行有兴趣的同学可以尝试主题聚焦控制,对所抓取的网页进行主题判定,只抓取特定主题的网页。
本文标题:实验3-信息获取-guide
链接地址:https://www.777doc.com/doc-7851675 .html