day08_爬虫系统搭建
网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被 广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新 这些网站的内容和检索方式。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当 前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根 据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然 后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统 的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索 引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程 给出反馈和指导。 通俗理解:爬虫是一个模拟人类请求网站行为的程序。可以自动请求网页、把数据抓取下来,然后使用 一定的规则提取有价值的数据。 聚焦爬虫:通常我们自己撸的为聚焦爬虫面向主题爬虫、面向需求爬虫:会针对某种特定的能容去爬取 信息,而且保证内容需求尽可能相关
导入爬虫项目
爬虫服务的初始化工作 以上介绍了爬虫所需要的一些技术以及常用的组件以及工具类,对常用的结构也做了一些了解,下来开 始讲解下详细的工作流程
接下来就是从CSDN上获取对应的URL
public List<String> getInitCrawlerUrlList(){
List<String> initCrawlerUrlList = new ArrayList<>();
if(StringUtils.isNotEmpty(suffix)){
String[] urlArray = suffix.split(",");
if(urlArray!=null && urlArray.length>0){
for(int i = 0;i<urlArray.length;i++){
String initUrl = urlArray[i];
if(StringUtils.isNotEmpty(initUrl)){
if(!initUrl.toLowerCase().startsWith("http")){
initCrawlerUrlList.add(prefix+initUrl);
}
}
}
}
}
return initCrawlerUrlList;
}
下面是解析URL
@Override
public List<ParseItem> parseOriginalRequestData(ProcessFlowData processFlowData) {
List<ParseItem> parseItemList = null;
List<String> initCrawlerUrlList = crawlerConfig.getInitCrawlerUrlList();
if(initCrawlerUrlList!=null && !initCrawlerUrlList.isEmpty()){
parseItemList = initCrawlerUrlList.stream().map(url->{
CrawlerParseItem parseItem = new CrawlerParseItem();
url = url+"?rnd="+System.currentTimeMillis();
parseItem.setUrl(url);
parseItem.setDocumentType(CrawlerEnum.DocumentType.INIT.name());
parseItem.setHandelType(processFlowData.getHandelType().name());
return parseItem;
}).collect(Collectors.toList());
}
return parseItemList;
}
爬虫测试类测试成功
目标页的解析
private List<ParseRule> getTargetParseRuleList() {
List<ParseRule> parseRules = new ArrayList<ParseRule>(){{
//标题
add(new ParseRule("title", CrawlerEnum.ParseRuleType.XPATH,"//h1[@class='title-article']/text()"));
//作者
add(new ParseRule("author",CrawlerEnum.ParseRuleType.XPATH,"//a[@class='follow-nickName']/text()"));
//发布日期
add(new ParseRule("releaseDate",CrawlerEnum.ParseRuleType.XPATH,"//span[@class='time']/text()"));
//标签
add(new ParseRule("labels",CrawlerEnum.ParseRuleType.XPATH,"//span[@class='tags-box']/a/text()"));
//个人空间
add(new ParseRule("personalSpace",CrawlerEnum.ParseRuleType.XPATH,"//a[@class='follow-nickName']/@href"));
//阅读量
add(new ParseRule("readCount",CrawlerEnum.ParseRuleType.XPATH,"//span[@class='read-count']/text()"));
//点赞量
add(new ParseRule("likes",CrawlerEnum.ParseRuleType.XPATH,"//div[@class='tool-box']/ul[@class='meau-list']/li[@class='btn-like-box']/button/p/text()"));
//回复次数
add(new ParseRule("commentCount",CrawlerEnum.ParseRuleType.XPATH,"//div[@class='tool-box']/ul[@class='meau-list']/li[@class='to-commentBox']/a/p/text()"));
//文章内容
add(new ParseRule("content",CrawlerEnum.ParseRuleType.XPATH,"//div[@id='content_views']/html()"));
}};
return parseRules;
}
这章的内容说实话没啥看的,主要就是复制代码,爬虫的代码基本都是固定的,后端的业务逻辑,在代码中已经写好了