简单的小说网站爬虫--爬小说
现在好多的小说网站只提供阅读,并不提供下载服务,既然能够读,可以在网页上看,那么小说内容一定在网页的源代码中
用浏览器,右键,查看元素,查看网页源代码,以及代码结构(火狐浏览器)
依旧使用Jsoup技术获取网页源代码(Jsoup有个选择器,把带有某种属性的标签选择出来,可以指定属性值),之后进行解析提取出有用的内容
过程:
小说网站提供的阅读服务,一个供用户选择章节进行阅读的页面,用户点击章节超链接进去之后,进行阅读,这就是我们要打开的网址
第一章:http://www.jingcaiyuedu.com/book/59396/0.html
第二章:http://www.jingcaiyuedu.com/book/59396/1.html
第三章:http://www.jingcaiyuedu.com/book/59396/2.html
………………………………………………………………
查看每个链接地址,发现一个规律,链接地址前面都是一样的,后面有一个数字是递增的,从第一章到最后一章,知道第一章的链接地址和最后一掌的链接地址,剩下的就都知道了。利用一个循环依次打开每个链接。有个问题,就是他的链接并不是挨个递增排下去的,偶尔会空出一个来,后面的代码中会解决
我们想要的东西都在代码里,标题,内容
接下来就是提取出来就好了!!!
利用io操作把获取到的内容写到文件中,由于都是汉字,利用字符流处理,避免乱码
用到字符输出流,参数设置为true,设置为可追加,因为进行几百次操作都在向这个文件中写
BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
完整代码:有效的代码压缩之后也就几行
package crawler; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.BufferedWriter; import java.io.FileWriter; public class Main { public static void main(String[] args){ for(int i=0;i<=542;i++) { Document doc = null; FileWriter fw=null; BufferedWriter bw=null; try { doc = Jsoup.connect("http://www.jingcaiyuedu.com/book/59396/" + i + ".html").get(); fw = new FileWriter("E:\\邪王逼婚:抢来的宠妃.txt", true); bw = new BufferedWriter(fw); //提取出带class属性值为active的li标签。获取标题 String title = doc.select("li[class=active]").text(); // System.out.println(title); //提取class属性值为panel-body content-body content-ext的div标签。获取内容 String text = doc.select("div[class=panel-body content-body content-ext]").text(); // System.out.println(text); bw.write(title);//添加标题 bw.newLine();//换行 bw.write(text);//添加内容 bw.newLine(); bw.newLine(); bw.flush();//清空缓冲区 } catch (Exception e) { //不进行任何操作,只是捕获异常,跳出本次循环,执行下一次循环,由于链接编号中偶尔会空出一个, e.printStackTrace(); }finally { try { fw.close(); bw.close(); } catch (Exception e) { //如果之前的网址打开出错,这里就会报错 } continue;//跳出本次循环 } } } }由于链接地址其中有不是挨个递增的,所以没有这个链接地址出现异常,捕获异常,最后执行finally中的continue跳出本次循环,接着执行下面的操作,不干扰程序的执行结果
每次进行io操作之后,一定要清空缓冲区,因为忘记这个事浪费了好长时间,一直在报错
其实自己从来不读小说的