直接上代码

目前还没写更改IP跳点的操作 ,爬到1400多条就被豆瓣服务器给BAN了,后续会慢慢地更新版本

TIP:BFS可无限爬取直至被BAN,DFS的话即使是换成尾递归也只能爬出400多条

TIPTIP:我正则表达式用的很烂,后面会把String操作全部转移到正则表达式中去,否则算法复杂度降不下来,大量异常的抛出可能也与String操作有关

package com;
/*** 孙煜晗爬虫魔改 version 1.3* sunYuhan*/
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.regex.*;public class exe {//提取的数据存放到该目录下//为html转化为的TXT文件private static String savepath="C:/Users/54781/Desktop/爬虫文件/";//等待爬取的urlprivate static List<String> allwaiturl=new ArrayList<>();//记录爬取过的urlprivate static Set<String> alloverurl=new HashSet<>();//记录所有url的深度进行爬取判断private static Map<String,Integer> allurldepth=new HashMap<>();//爬取的深度private static int maxdepth=10;public static void main(String args[]){//确定爬取的网页地址String strurl="https://book.douban.com";workurl(strurl,1);while(true){String nexturl=allwaiturl.get(0);//获取list第一个元素allwaiturl.remove(0);//移除list第一个元素workurl(nexturl,allurldepth.get(nexturl)); //广搜  }}public static void workurl(String strurl,int depth){//判断当前url是否爬取过if(!(alloverurl.contains(strurl)||depth>maxdepth)){//建立url爬取核心对象try {URL url=new URL(strurl);//通过url建立与网页的连接URLConnection conn=url.openConnection();//通过链接取得网页返回的数据InputStream is=conn.getInputStream();System.out.println(conn.getContentEncoding());//一般按行读取网页数据,并进行内容分析//因此用BufferedReader和InputStreamReader把字节流转化为字符流的缓冲流//进行转换时,需要处理编码格式问题BufferedReader br=new BufferedReader(new InputStreamReader(is,"UTF-8"));//按行读取并打印String line=null;// String line2=null;//正则表达式的匹配规则提取该网页的链接Pattern p2=Pattern.compile("(?<=<span class=\"short\">).*?(?=</span>)");//找到评论Pattern p=Pattern.compile("<a .*href=.+</a>");//找到urlPattern p3=Pattern.compile("(?<=<a class=\"  tag\").*?(?=</a>)");//找到标签Pattern p4=Pattern.compile("(?<=<span property=\"v:itemreviewed\">).*?(?=</span>)");//找到书名// while()//建立一个输出流,用于保存文件,文件名为执行时间,以防重复// PrintWriter pw=new PrintWriter(new File(savepath+System.currentTimeMillis()+".txt"));PrintWriter writer2 = null;//用于写评论PrintWriter writer3=null;//用于写标签boolean flag=false;String word=null;String tag=null;while((line=br.readLine())!=null){//System.out.println(line);//编写正则,匹配超链接地址// pw.println(line);Matcher m=p.matcher(line);//urlMatcher m2=p2.matcher(line);//评论Matcher m3=p3.matcher(line);//标签Matcher m4=p4.matcher(line);//书名String bookname;if(m4.find()&&!flag)//找到书名即可开始找标签和评论{bookname=m4.group();writer2=new PrintWriter(new File(savepath+"豆瓣评论/"+bookname+".txt"));writer3=new PrintWriter(new File(savepath+"豆瓣标签/"+bookname+".txt"));flag=true;}while(m3.find()&&flag)//爬标签{tag=m3.group();tag=tag.substring(tag.indexOf(">")+1, tag.length());//对tag的string处理writer3.println(tag);writer3.flush();}while(m2.find()&&flag)//爬评论{word=m2.group();writer2.println(word);writer2.flush();}while(m.find()){//爬urlString href=m.group();//找到超链接地址并截取字符串//有无引号href=href.substring(href.indexOf("href="));if(href.charAt(5)=='\"'){href=href.substring(6);}else{href=href.substring(5);}//除去HTTP协议那部分try{href=href.substring(0,href.indexOf("\""));}catch(Exception e){try{href=href.substring(0,href.indexOf(" "));}catch(Exception e1){href=href.substring(0,href.indexOf(">"));}}if(href.charAt(0)=='.'&&strurl.endsWith("/"))//判断简写URL问题href=strurl+href.substring(2,href.length()-1);else if(href.charAt(0)=='.')href=strurl+href.substring(1,href.length()-1);if(href.startsWith("https://book.douban.com/subject/")){//保证在站内访问//将url地址放到队列中allwaiturl.add(href);allurldepth.put(href,depth+1);}}}//writer2.flush();writer2.close();// pw.close();br.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//将当前url归列到alloverurl中alloverurl.add(strurl);System.out.println(strurl+"网页爬取完成,已爬取数量:"+alloverurl.size()+",剩余爬取数量:"+allwaiturl.size());}//用递归的方法继续爬取其他链接// String nexturl=allwaiturl.get(0);// allwaiturl.remove(0);// workurl(nexturl,allurldepth.get(nexturl));                }
}

利用JAVA的BFS爬虫爬出豆瓣读书的评论和标签相关推荐

  1. python爬虫爬取豆瓣读书Top250

    python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...

  2. Python爬虫 爬取豆瓣读书

    最近用Python写了个豆瓣读书的爬虫玩,方便搜罗各种美美书,分享给大家 实现功能: 1 可以爬下豆瓣读书标签下的所有图书 2 按评分排名依次存储 3 存储到Excel中,可方便大家筛选搜罗,比如筛选 ...

  3. 利用python爬虫爬取豆瓣读书-文学-名著的封面

    获取至少两个页面的豆瓣读书-文学-名著的图书封面图片,将图片存到文件夹. 具体代码如下: #dubanimage.py import requests from bs4 import Beautifu ...

  4. python爬虫爬取豆瓣读书

    python的课程设计,我爬取的是豆瓣的图书 设计题目:  豆瓣读书的Python爬虫 一.需求分析 由于豆瓣上的图书良莠不齐,很难一下选择适合我们的图书,所以我想通过Python的爬虫程序,实现对豆 ...

  5. Python爬虫 - 爬取豆瓣读书TOP250电子书

    1.爬取思路 访问豆瓣读书top250,并提取书籍名称. 把提取的书籍名称,放到搜书网站(本文使用的是熊猫搜书). 把搜索的结果保存到本地.(底部有保存的文本文件,需要自提) 2.重点解析 1.豆瓣翻 ...

  6. Python3之爬虫爬取豆瓣读书Top250

    import requests from bs4 import BeautifulSoup from openpyxl import Workbookexcel_name = "豆瓣读书.x ...

  7. Python爬虫-爬取豆瓣读书

    爬点什么好呢?最近老是浏览豆瓣上的帖子,那就爬取下豆瓣读书吧! 网络请求,返回值是html页面. 需要对返回回来的结果进行解析.使用Beautiful Soup来解析 参见(http://beauti ...

  8. Java网络爬虫--一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库

    一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 目录 一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 第一步:创建项目,搭建项目结构 p ...

  9. 爬取豆瓣读书-豆瓣成员常用的标签(Python爬虫实战)

    前两篇博客,我们介绍了如何对豆瓣读书历史记录进行抓取,这一篇博客是一个收尾工作. 传送门: 爬取豆瓣读书-用户信息页链接(Python爬虫实战) 爬取豆瓣读书-用户所有阅读书籍名称.日期和书籍链接(P ...

  10. 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分

    安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...

最新文章

  1. 对时序逻辑电路采用不同描述方式,ISE综合出来的电路(RTL Schematic)比较(以模5计数器为例)
  2. HBase中的时间维度
  3. [阿里云Java Web环境搭建]二、Ubuntu安装JDK
  4. DJANGO中,用QJUERY的AJAX的json返回中文乱码的解决办法
  5. 将sql 结果导出到文件
  6. Mysql中慢查询Sql的记录查看
  7. PUT上传POC--Put2Poc.py
  8. Solr常用查询语法笔记
  9. MYSQL读写性能测试
  10. SuperPoint学习(一)
  11. 深入 Composer autoload
  12. 带你去看——WRC 2016 世界机器人博览会
  13. Apple Pay如何使用?全网最完美攻略(图文教程)!
  14. 神经网络中误差值计算公式的选取
  15. 决策树分析例题经典案例_决策树分类的实例
  16. Java MultipartFile实现文件上传(一)
  17. android bp文件_Android 基础 | Android.bp 语法浅析
  18. SAP FICO 解析成本要素类别
  19. 国产操作系统厂商中科红旗解散清算内幕
  20. 物联网与射频识别技术,课程实验(一)

热门文章

  1. 《Python编程从入门到实践 第二版》第八章练习
  2. 计算机第十三套试题,2012年计算机二级VB第十三套上机试题及解析
  3. 电脑连接WiFi,浏览器打不开网页
  4. 新手如何当好办公室主任?傻瓜才做“二当家的”,高手都懂这5个潜规则
  5. hive中reduce类函数说明
  6. 全球及中国智能家居设备市场竞争态势与投资策略建议报告2022版
  7. 用户权限---u+s\g+s\o+t三个特殊权限说明
  8. 【Rust日报】 2019-08-05:用Rust重写物联网网关 Part 2: 饮鸩止渴:为什么我们不用C++重写IoT应用...
  9. 重庆链家租房数据分析
  10. 追求得到之日即其终止之时, 寻觅的过程亦即失去的过程。——村上