Java爬虫入门(一)——项目介绍

前言:

这个系列我分四个部分来分别接触四块知识,最后再串起来:
Java爬虫入门(一)——项目介绍
Java爬虫入门(二)——HttpClient请求
Java爬虫入门(三)——正则表达式
Java爬虫入门(四)——线程池和连接池
Java爬虫入门(五)——缓冲流写入
GitHub地址:

https://github.com/jjc123/Java-Crawler/blob/master/README.md

突然心血来潮想学一下爬虫,本来是打算学python的(学习成本不高),不过既然是搞java的,那就用java好啦,毕竟知识可以复用,而且java的爬虫框架库也不少。

于是开始了爬虫填坑史
网上找了一些java爬虫的资料:
Java使用HttpClient发送Get和Post请求
零基础写Java知乎爬虫之先拿百度首页练练手
java爬虫入门
爬虫一般分三步:

1. 建立网络连接,爬取数据
2. 建立正则表达式规范
3. 使用正则表达式爬取获得的数据

如果数据量比较庞大,可以选择线程池,连接池并发。
先定个小目标吧 :

爬取一个小说网站的小说下载到本地

小说网址:

https://www.bookbao8.com/BookList-c_0-t_2-o_1.html

项目要求:
JAVA爬虫 并发爬取静态小说网站的全部小说
数量级过万,理论上可行,不过测试的时候我就测试了100组而已。
涉及的知识:

1. HttpClient请求
2. 连接池并发
3. 线程池并发
4. 正则表达式
5. IO流保存本地文件

为什么选择爬取这一个静态网页呢? 因为:
对于刚入门的菜狗如我,就别想着爬知乎,百度,CSDN了。
因为我发现我爬的百度首页都是看不懂的编码格式,如:

.bdsug .bdsug-direct p{color:#00c;font-weight:700;line-height:34px;padding:0 8px;cursor:pointer;white-space:nowrap;overflow:hidden}
.bdsug .bdsug-direct p img{width:16px;height:16px;margin:7px 6px 9px 0;vertical-align:middle}
.bdsug .bdsug-direct p span{margin-left:8px}
.bdsug .bdsug-direct p i{font-size:12px;line-height:100%;font-style:normal;font-weight:400;color:#fff;background-color:#2b99ff;display:inline;text-align:center;padding:1px 5px;*padding:2px 5px 0;margin-left:8px;overflow:hidden}
.bdsug .bdsug-pcDirect{color:#000;font-size:14px;line-height:30px;height:30px;background-color:#f8f8f8}
.bdsug .bdsug-pc-direct-tip{position:absolute;right:15px;top:8px;width:55px;height:15px;display:block;background:url(https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/global/img/pc_direct_42d6311.png) no-repeat 0 0}
.bdsug li.bdsug-pcDirect-s{background-color:#f0f0f0}
.bdsug .bdsug-pcDirect-is{color:#000;font-size:14px;line-height:22px;background-color:#f8f8f8}
.bdsug .bdsug-pc-direct-tip-is{position:absolute;right:15px;top:3px;width:55px;height:15px;display:block;background:url(https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/global/img/pc_direct_42d6311.png) no-repeat 0 0}
.bdsug li.bdsug-pcDirect-is-s{background-color:#f0f0f0}
.bdsug .bdsug-pcDirect-s .bdsug-pc-direct-tip,.bdsug .bdsug-pcDirect-is-s .bdsug-pc-direct-tip-is{background-position:0 -15px}
.bdsug .bdsug-newicon{color:#929292;opacity:.7;font-size:12px;display:inline-block;line-height:22px;letter-spacing:2px}
.bdsug .bdsug-s .bdsug-newicon{opacity:1}
.bdsug .bdsug-newicon i{letter-spacing:0;font-style:normal}
.bdsug .bdsug-feedback-wrap{text-align:right;background:#fafafa;color:#666;height:25px;line-height:25px;display:none}

原因我总结了几点:
网页最终显示的页面源码是经过浏览器解释后的,
你get或者post请求到的源码是服务器直接返回的,不一样是正常的。
最基础的爬虫只能爬取没有动态加载的纯静态网页,而目前主流的网站都是有反爬虫的措施,以及各种验证措施。就比如2017年知乎就已经改版了,爬虫更加困难,之前的关于知乎的爬虫项目也都是无效的,因为爬虫模式不一样的,也就是说更难了。
所以对于初学者来说,找一个简单的纯静态页面练手才是正道

1. 网页采用ajax等动态交互模式 爬取的信息可能只有一个div,  
   没有内容,要经过浏览器动态加载后才会显示本来面目
2. 网页采用js等浏览器渲染模式,爬取的信息都是看不懂的,  
   需要浏览器本身来解析成可看的内容
3. 登陆验证:无法直接爬取网站信息,需要模拟浏览器访问网站才可
4. 同一个ip访问一个网站频率太高,被检测出爬虫,直接封杀,
   所以你得让你的爬虫sleep一下,比如模拟人的规律5分钟爬取一次

猜你喜欢

转载自blog.csdn.net/qq_38409944/article/details/81459761
今日推荐