码迷,mamicode.com
首页 > Web开发 > 详细

webmagic

时间:2020-02-04 10:21:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:cname   jquery   stc   日志   creat   gets   持久化   去重   方案   

网络爬虫 Web crawler 可以代替人工自动从互联网中进行数据信息的采集和整理 按照一定的规则自动抓取万维网上的信息程序或者脚本

从功能上区分为 数据采集     处理    储存  这三个部分 

从流程上来说 从一个或者若干个网页URL地址去抓取指定的想要的内容 

为什么学习爬虫 

1 可以实现搜索引擎 2大数据时代,可以让我们获取更多的数据源  3可以跟好的进行搜索引擎优化SEO  4 有利于就业 

 

 
依赖 Apache Httpclient   4.5.2

日志jar包  log4j  1.7.25 注意作用域 设置 默认为test测试

技术图片

 

一个入门 爬去html

1.创建httpClient对象、  HttpClients。createDefault();

2 创建httpget  或者 httppost 请求 对象  在对象里设置url 地址

3 声明 List<NameValuePair> 封装表单中的参数 对象.add (BasicNameValuePair 实例对象  需要传参数的key  value )

4 创建表单的Entity对象,第一个参数就是封装好的表单数据,第二个参数就是编码 UrlEncodedFormEntit (上面的对象  ,utf8)

5 实体对象拿到了  设置表单的Entity对象到url 上

使用HttpClient发起请求,获取response    response = httpClient.execute(httpPost);

7  解析响应 response.getStatusLine().getStatusCode() == 200 的时候

当这时候会有一个资源浪费问题  

解决办法   使用连接次管理起来  

1 创建 连接池 PoolingHttpClientConnectionManager cm   

2 设置最大连接数  cm.setMaxTotal(100);

3 设置每个主机的最大连接数  当爬去多个地址url的时候需要设置  可以平均爬去数据   cm.setDefaultMaxPerPoute(10);

4 连接池管理  doGet(cm);  可以创建多个  就是多个连接池

5 不需要每次创建新的httpClient 而是从连接池中获取httpClient 对象 HttpClients.custom().setConnectionManager(cm).build();

 httpClient.execute(new HttpGet (url));

加一个判断  当状态码为200 的时候  在输出  最后记得关流  但是只是关闭 响应的对象   而httpClient 不需要关闭  已经交给了连接池管理  

当网路不好的场景 可以设置请求时间  和响应时间  还有传输时间  根据实际情况调整时间长短   RequestConfig.custom().setConnectTimeout(1000)

最后记得build一下

            底层实现 Jsoup 

需要导入依赖   

jsoup    junit     commons IO  里面有一些我们常用的工具类  commons Lang  包含stringUtil 

其主要是通过docament id选择器 class css选择器等取html文本信息  类似jquery

          

            webMagic

分为四大部分 一。Downloader 下载 二。Page Processor 处理 三。Scheduler 管理  四。Pipeline 持久化  由 Spider将它们组织起来 webMagic 的设计参考Scapy

Spider 可以理解成为一个大的容器  也就是webMagic逻辑的核心   下面是流程图

技术图片

 

执行流程 可以为 Downloader负责从互联网上下载页面  下载的工具呢 就是 Apache HttpClient 

PageProcessor 负责解析下载好的页面 抽取需要的信息 已经发现新的连接等 解析的工具呢 使用的  Jsoup 并且基于该工具  开发了解析XPath的工具 Xsoup

scheduler 负责管理待抓取的url  以及去重工作  管理url呢  默认提供了JDK 的内存队列来管理URL 用集合来进行去重  并且支持使用redis分布式管理 把url 交给下载器管理

pipeline 负责抽取结果的处理 包括计算 持久化 到文件,数据库等  默认提供了  输出到控制台 和保存到文件两种处理方案

创建一个项目 导入  核心包  webmagic-core 这里有个bug 

最新版本的0.7。3 等于ssl 的并不安全  如果直接从maven中央仓库下载依赖  在爬去只支持ssl v1.2的网站会有ssl的异常抛出  解决方案 直接去 gitlub  https://github.com/code4craft/webmagic.git  去源码包下载   或者修改重写方法

临时适配方式,修改HttpClientGenerator中的buildSSLConnectionSocketFactory方法,

return new SSLConnectionSocketFactory(createIgnoreVerifySSL(), new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"},
                    null,
                    new DefaultHostnameVerifier())
一个实现类 实现
PageProcessor 需要重写两个方法 public void process(Page page) getSite()

第一步 主函数执行爬虫 Spider.create(实例类) //
爬虫入口 方法内是实现方法JobProcessor 实现了PagePrcessor
.addUrl("")  //设置爬取数据的页面  
.addPipeline(new FilePipeline("/文件地址")) //设置持久化
.thread(5) //设置线程个数
pageProcessor 的作用

webmagic

标签:cname   jquery   stc   日志   creat   gets   持久化   去重   方案   

原文地址:https://www.cnblogs.com/yuguohua/p/12167703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!