版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章-学习目标说出网络爬虫的作完成十次方用户数据的爬数据,信项重工作互联的数海量如果纯靠人力进行信息,不仅低效繁琐,搜集的成本也会提高。如何自动高效地获取互联网中我们感的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。网络爬虫(Webcrawler)也叫做网络机器人,可以代替人们自动地在互联网中进行数大数据时代,可以让我们获取的数据源快速填充测试和运营数为人工智能提供训练数据网络爬虫常用的技术(底层实现HttpClientHttpClient是ApacheJakartaCommon下的子项目,用来提供高效的、的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议的版本和建议。HttpClient已经应用在很多的项目中,比如ApacheJakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。信息请关注jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供开源框架逻辑功能的开发。webmagic的非常简单,但是覆盖爬虫的整个流程,也是很好的学习webmagic的主要特完全模块化的设计,强大的可扩展性支持分布支持爬取js动态渲染的页面无框架依赖,可以灵活的嵌入到项目中去爬虫框架架构解c的结构分为r、r、ur、e四大组件,并由r将它们彼此组织起来。这四大组件对应爬虫生命周期中的、处理、管理和持久化等功能。而r则将这几个组件组织起来,让它们可以互相交互,流程化的的。Downloader负责从互联网上页面,以便后续处理。WebMagic默认使用ApacheHttpClient作为工具PageProcessor负责解析页面,抽取有用信息,以及发现新的。WebMagic使用Jsoup爬取页面全部需求:编写爬虫程序,爬取csdn中博客的内容编写类实现网页内容的爬packagepackageimportimportus.codecraft.webmagic.Site;importus.codecraft.webmagic.Spider;import*publicclassMyProcessorimplementsPageProcessorpublicvoidprocess(Pagepage)}publicSitegetSite()return}publicstaticvoidmain(String[]args)Spider.create(new }}Spider是爬虫启动的。在启动爬虫之前,我们需要使用一个PageProcessor创建方法说明示例创建添加初始开启n当前线程spider.addPipeline(newspider.setDownloader(new直接取得ResultItemsresult=Listresults="同时ider的其他组件(onloader、hduler、eline)都可以通过etage代表了从onloader到的一个页面——可能是HTL,也可能是JSON其他文本格式的内容。Page是WbMagic抽取过程的对象,它提供一些方法可供抽取、结果保存等。方法说明示例site.setCharset("utf-设间,单位addsite.add set后才可生site.set 爬取指定内容(如果我们想爬取网页中部分的内容,需要指定xpathXPath,即为XML路径语言(XMLPathLanguage),它是一种用来确定XML文档中某部分位置的语言。XPath使用路径表达式来选取XML语法详见附录A我们通过指定xpath来抓取网页的部分<a<ahref="/nav/ai">人工智能添加目标地我们可以通过添加目标地址,从页面爬取到的页publicpublicvoidprocess(Pagepage)page.addTargetRequests(page.getHtml().links().all());//将当前页面 }运行后发现好多地址都出现在控制目标地址正则需求:只提取博客的文章详细页内容,并提取packagepackageimportimportus.codecraft.webmagic.Site;importus.codecraft.webmagic.Spider;import*publicclassMyProcessorimplementsPageProcessorpublicvoidprocess(Pagepage)//page.addTargetRequests(page.getHtml().links().all());//将当前页 ‐]+/article/details/[0‐9]{8}").all());}publicSitegetSite()return}publicstaticvoidmain(String[]args)Spider.create(new }}ConsolePipeline控制台*publicclassMyProcessorimplementsPageProcessorpublicvoidprocess(Pagepage)//page.addTargetRequests(page.getHtml().links().all());//将当前页 ‐]+/article/details/[0‐9]{8}").all()}publicSitegetSite()return}publicstaticvoidmain(String[]args)Spider.create(newMyProcessor() .addPipeline(new}}FilePipeline文件publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) .addPipeline(new.addPipeline(newFilePipeline("e:/data"))//以文件方式保}以json方式保publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) .addPipeline(new.addPipeline(new.addPipeline(newJsonFilePipeline("e:/json"))//以json方式存}定制如果以上Pipeline都不能满足你的需要,你可以定制创建类MyPipeline实现接口packagepackageimportimport importpublicclassMyPipelineimplementsPipelinepublicvoidprocess(ResultItemsresultItems,TaskStringtitle=resultItems.get("title").toString(); 定制的title:"+title);}}修改main方publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) .addPipeline(new.addPipeline(new.addPipeline(new.addPipeline(newMyPipeline())//}Scheduler(URL管理最基本的功能是实现对已经爬取的URL进行标示。可以实现URL的增目前scheduler主要有三种实现方式: QueueScheduler2)文件队列FileCacheQueueScheduler3)Redis队列内存使用setScheduler来设置publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) .setScheduler(new}文件使用文件保存抓取URL,可以在关闭程序并下次启动时,从之前抓取到的URL创建文件夹publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) //.setScheduler(newQueueScheduler())//设置内存}运行后文件夹E:\scheduler会产生两个文件.urls.txtRedis队使用Redis保存抓取队列,可进行多台机器同时合作抓运行redis服务publicstaticpublicstaticvoidmain(String[]args){Spider.create(newMyProcessor()) //.setScheduler(newQueueScheduler())//设置内存.setScheduler(newRedisScheduler(""))//设置Redis列}需求分每日某时间段从CSDN播客中爬取文档,存入文章数据库中频道设地资数据前向数据库tensquare_article的tb_channel表中添加记代码编模块创建模块 ,引入依 创建配置文件port:9014name:tensquare‐crawler#指定服务名driverClassName:url:jdbc:mysql://:3306/tensquare_article?show‐sql:host:publicclassCrawlerApplicationprivateStringredis_host;publicstaticvoidmain(String[]args){SpringApplication.run(CrawlerApplication.class,args);}publicIdWorkeridWorkker(){returnnewIdWorker(1,1);}publicRedisSchedulerredisScheduler(){returnnew实体类及数据接口爬取创建文章爬取类cessor;importus.codecraft.webmagic.Page;importus.codecraft.webmagic.Site;import*文章爬publicclassArticleProcessorimplementsPageProcessorpublicvoidprocess(Pagepage)[a‐z0‐9Stringtitle=page.getHtml().xpath("//*Stringcontent=page.getHtml().xpath("//*System.out.println("标题:"+title);System.out.println("内容:"+contentif(title!=null&&content!=null){//如果有标题和内容page.setSkip(true);//跳}}publicSitegetSite()return}}入库创建文章入库类 ,负责将爬取的数据存入数据packagecom.tensquare.crawler.pipeline;importcom.tensquare.crawler.dao.ArticleDao;importcom.tensquare.crawler.pojo.Article;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Repository;importus.codecraft.webmagic.ResultItems;importus.codecraft.webmagi importus.codecraft.webmagic.pipeline.Pipeline;importutil.IdWorker;import*入库publicclassArticleDbPipelineimplementsPipelineprivateArticleDaoprivateIdWorkerpublicvoidsetChannelId(StringchannelId){this.channelId=channelId;}privateStringchannelId;//频道IDpublicvoidprocess(ResultItemsresultItems,Tasktask){Stringtitle=resultItems.get("title");Stringcontent=resultItems.get("content");Articlearticle=newArticle();}}相当于一个Map,它保存PageProcessor处理的结果,供Pipeline任务创建任务
,若设置为true,则不应被Pipelinepackageimportcom.tensquare.crawler.pipeline.ArticleDbPipeline;importcom.tensquare.crawler.pipeline.ArticleTxtPipeline;importcessor.ArticleProcessor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframew importimport*文章任publicclassArticleTaskprivateArticleDbPipelineprivateRedisSchedulerprivateArticleProcessor*爬取ai数@Scheduled(cron="05421**?")publicvoidaiTask(){System.out.println("爬取AI文章Spiderspider=Spider.create(articleProcessor); }}需求分从csdn中爬取用户昵称和头像,存到用户表,头像到本代码编模块创建工程tensquare_user_crawler。pom.xml 创建配置文件port:9015name:tensquare‐user‐crawler#指定服务名driverClassName:url:host:publicclassUserCrawlerApplicationprivateStringredis_host;publicstaticvoidmain(String[]args){SpringApplication.run(UserCrawlerApplication.class,args);}publicIdWorkeridWorkker(){returnnewIdWorker(1,1);}publicRedisSchedulerredisScheduler(){returnnew实体类及数据接参见用户微服务。代码爬取packagecessor;importorg.springframew packagecessor;importorg.springframew importus.codecraft.webmagic.Page;importimport*文章爬publicclassUserProcessorimplementsPageProcessorpublicvoidprocess(Pagepage)[a‐z0‐9Stringnickname=page.getHtml().xpath("//*Stringimage=page.getHtml().xpath("//*if(nickname!=null&&image!=null){//如果有昵称和头像page.setSkip(true);//跳}}publicSitegetSite()return}}工具资源提供了工具类,拷贝 mon工程的util包packageutil;importjava.io.*;.URL;import publicclassDownloadUtilpublicstaticvoiddownload(StringurlStr,Stringfilename,StringsavePath)throwsIOException{URLurl=new//打开url连URLConnectionconnection=//输入InputStreamin=//缓冲数byte[]bytes=newintlen;//文Filefile=newFile(savePath);OutputStreamout=new//先读到byteswhile}}}入库packagecom.tensquare.usercrawler.pipeline;importcom.tensquare.usercrawler.dao.UserDao;importcom.tensquare.usercrawler.pojo.User;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframew importus.codecraft.webmagic.ResultItems;importus.codecraft.webmagi importus.codecraft.webmagic.pipeline.Pipeline;importutil.DownloadUtil;importutil.IdWorker;importjava.io.IOException;publicclassUserPipelineimplementsPipelineprivateIdWorkerprivateUserDaopublicvoidprocess(ResultItemsresultItems,Tasktask)Useruser=newUser();Stringimage=resultItems.get("image");// StringfileName=image.substring(image.lastIndexOf("/")+1);try{}catch(IOExceptione){}}}任务package importcessor.UserProcessor;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframew importimport*用户爬取任务publicclassUserTaskprivateRedisSchedulerprivateUserPipelineprivateUserProcessor*爬取用户数@Scheduled(cron="05622**?")publicvoiduserTask(){System.out.println("爬取用户Spiderspider=Spider.create(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年急性胰腺炎护理:全面解析与护理要点课件
- 运动科技:创新之路-智能产品的设计、市场及推广
- 基于学科核心素养的高中化学主题式教学模式研究
- 职场守秘义务承诺函(5篇)
- 培训部门新员工入职培训操作指南
- 材料样品规格确认函3篇范文
- 智慧建筑能耗管理系统优化手册
- 精细化医疗服务品质承诺函3篇
- 能源利用优化升级承诺书6篇
- 信息安全加强系统防护指南
- 学术道德与学术规范的关系
- 土石坝施工-碾压土石坝施工(水利工程施工课件)
- DL/T 5457-2012 变电站建筑结构设计技术规程
- 2023储能电站系统全面解析
- 学而思教育薪酬绩效管理制度
- 大学英语四级翻译课件
- 2022年丽江文化旅游学院教师招聘考试笔试试题及答案
- 2022年锦州市三支一扶考试真题
- 2021年公安机关人民警察基本级执法资格考试试卷(含答案)
- 山西省交口县地方国营硫铁矿资源开发利用方案和矿山环境保护与土地复垦方案
- Unit+1+Reading+The+ocean+deep课件【高效备课精研+知识精讲提升】 高中英语牛津译林版(2020)选修第一册+
评论
0/150
提交评论