爬虫
百度百科释义
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫
Jsoup
百度百科释义
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
做过前端开发的朋友应该知道JQuery,这里的Jsoup其实就是Java版的JQuery;其实作者也不喜欢这些花里胡哨的概念性的东西!但考虑到不同受众和未接触过编程的朋友们还是要简单引导一下
(PS:有很多朋友会问为啥不用Python因为py几行代码就搞定了,更有甚者以为Python就是爬虫!其实这个观点是不正确的,任何技术存在即合理,但要结合具体业务,好钢要用到刀刃上不是?!Python以后有机会再出吧哈哈~~)
说人话:爬网页就是所见即所得
依赖
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
代码
publicstaticvoidmain(String[] args)throwsException{Map headers =newHashMap();
headers.put("Proxy-Host","www.duoip.cn");// 设置代理主机
headers.put("Proxy-Port","8000");// 设置代理端口
headers.put("Referer","https://www.bqgka.com/s?q=%E5%85%A8%E8%81%8C%E5%A4%A9%E4%B8%8B");// 伪装防盗链
headers.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36");// 伪装浏览器//int bookNO =502;Document doc =Jsoup.connect("https://www.bqgka.com/book/"+ bookNO).headers(headers).ignoreContentType(true).get();// System.out.println(Jsoup.parseBodyFragment(doc.html()).body());String bookName = doc.getElementsByTag("h1").text();//分页遍历for(int p =1; p <=99999; p++){try{
doc =Jsoup.connect("https://www.bqgka.com/book/"+ bookNO +"/"+ p +".html").headers(headers).ignoreContentType(true).get();Elements els = doc.getElementsByClass("Readarea ReadAjax_content");String content = doc.getElementsByTag("h1").text()+"\n";if(els.size()==0){
log.info(bookName +"爬取完成");break;}for(int i =0; i < els.size(); i++){List<TextNode> textNodes = els.get(i).textNodes();for(int j =0; j < textNodes.size(); j++){
content += textNodes.get(j).text()+"\n";}}FileUtil.appendUtf8String(content,"D:\\spiders\\mybook\\《"+ bookName +"》.txt");//线程休眠-防止网站检测到请求过于频繁Thread.sleep(500);}catch(IOException exception){
log.error(exception.getMessage());Thread.sleep(1000);continue;}
log.info("{},爬取成功", doc.getElementsByTag("h1").text());}}
效果
一些思考
反爬策略:很多网站现在都有反爬策略,基于用户请求的headers反爬是最常见的反爬机制。
通过分析目标网站请求头可以得知主要是通过设置Referer(防盗链)和User-Agent(请求终端)
见招拆招,你有反爬策略我们当然也有反反爬策略,正所谓你有张良计,我有过墙梯。三十年河东,三十年河西,莫欺少年穷!(有点中二了,哈哈~~~)
反反爬策略:
伪装浏览器:即在爬虫中添加headers,并在headers中添加浏览器
伪装防盗链:在headers中添加防盗链,通过抓包查看具体值
想简单了解反爬和反反爬的朋友可以康康这个
写在最后:上面的案例是最简单的爬虫,也还有很多优化的地方(比如多线程,IP代理池等),爬虫技术是为了帮助我们更好的利用互联网进行数据分析、信息整合等业务,自己娱乐一下就好,互联网不是法外之地,切勿做违法犯罪之事,否则将喜提银手镯。。。。。。
版权归原作者 一剑光寒 所有, 如有侵权,请联系我们删除。