继前篇文章介绍如何使用Java爬取百姐视频之后,就想着如何获取糗百段子。在仔细研究了其规则之后,总算成功爬取了。在中间也遇到了一些问题,如其网页源码和实际获取的内容不一致问题,当时被困扰了很久,改了几次匹配规则,还好解决了。下面直接放码(Talk is cheap, show code)。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import cn.cxd.tools.FileTools;public class WebSpiderDemo2 {public static void main(String[] args) throws Exception {String source = "https://www.qiushibaike.com/text/page/";String destUrl = "https://www.qiushibaike.com";Set<String> setAll = new HashSet<>();for (int index = 1; index <= 13; index++) {String tmp = source + index + "/";Set<String> urlSet = getArticleUrl(tmp);setAll.addAll(urlSet);}String destPath = "D:/joke.txt";File destFile = new File(destPath);BufferedWriter bw = new BufferedWriter(new FileWriter(destFile, true));Iterator<String> it = setAll.iterator();while (it.hasNext()) {String articleUrl = destUrl + it.next();saveToLocal(articleUrl, bw);}FileTools.close(bw);}private static void saveToLocal(String articleUrl, BufferedWriter bw) throws Exception {URL url = new URL(articleUrl);InputStream is = url.openStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String line = null;String textRegex = "<span class=\"big-begin\">" + "(.+)";Pattern pat = Pattern.compile(textRegex);for (int i = 0; i < 500; i++) {line = br.readLine();if (null != line && line.startsWith("<span class=\"big-begin\">")) {Matcher matcher = pat.matcher(line);if (matcher.find()) {String text = matcher.group(1).replace("</span>", "").replace("<br/>", "  ");bw.write(text);bw.newLine();bw.newLine();i = 500;}}}bw.flush();FileTools.close(br);}public static Set<String> getArticleUrl(String source) throws Exception {URL url = new URL(source);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));String line = null;String urlRegex = "/article/\\d+";Pattern pattern = Pattern.compile(urlRegex);Set<String> set = new HashSet<>();Map<String, Integer> map = new HashMap<>();for (int i = 0; i < 3000; i++) {line = br.readLine();if (null != line) {if (line.contains("target=\"_blank\"")) {Matcher matcher = pattern.matcher(line);if (matcher.find()) {String tar = matcher.group(0);if (map.containsKey(tar)) {set.add(tar);} else {map.put(tar, 1);}}}}}if (null != br) {br.close();}return set;}}

其中的FileTools为一个工具类,用于关闭Java的IO,其代码如下:

import java.io.Closeable;
import java.io.IOException;public class FileTools {public static void close(Closeable... close) {for (Closeable io : close) {if (null != io) {try {io.close();} catch (IOException e) {e.printStackTrace();}}}}
}

最后爬取结果如下

注:此代码只能作为学习交流之用,千万不能做恶,千万不能做恶,千万不能做恶,千万不能做恶,千万不能做恶,千万不能做恶。

Java爬取糗百段子相关推荐

  1. java爬取捧腹网段子

    先上效果图: 准备工作: /*** 建立http连接*/ public static String Connect(String address) {HttpURLConnection conn = ...

  2. java爬取捧腹网段子(多线程版)

    前文链接 : java爬取捧腹网段子 上一篇文章讲述了如何使用Java爬取内容并写入文件,但是速度堪忧,今天将代码搞成了多线程版本, 具体方式如下: 新建一个splider类,继承callable接口 ...

  3. Java爬取解析去哪儿景点信息

    前言:这两周在做 Web 课的大作业,顺便琢磨了一下如何使用 Java 从网上获取一些数据,现在写这篇博客记录一下. PS:这里仅限交流学习用,如利用代码进行恶意攻击他网站,和作者无关!!! Java ...

  4. 用java爬取学校数据_Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  5. Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索

    Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索 一.资源 为什么接下来的代码中要使用el.getElementsByTa ...

  6. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文 java爬取网页内容 简单例子(1)--使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则 ...

  7. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  8. Java爬取并下载酷狗音乐

    本文方法及代码仅供学习,仅供学习. 案例: 下载酷狗TOP500歌曲,代码用到的代码库包含:Jsoup.HttpClient.fastJson等. 正文: 1.分析是否可以获取到TOP500歌单 打开 ...

  9. MinerConfig.java 爬取配置类

    MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner;import java.util.List;/*** 爬取配置类* @auth ...

  10. java爬取单张图片

    我们经常需要在网页上获取一些图片,有的图片我们是可以直接下载使用,有的图片需要我们登陆账号甚至付费下载,所以在此我写了一个使用Java爬取任意网页单张图片的爬虫. 代码解析 1.图片的网络位置 2.进 ...

最新文章

  1. 无监督域对抗算法:ICCV2019论文解析
  2. POJ 1637 Sightseeing tour(最大流)
  3. python做出来的东西_【python小白】 做了一个爬虫,但是爬出来的东西无法存储...
  4. c++ map利用迭代器赋值
  5. 【推荐】国外优秀Drupal答疑网站
  6. css html 字竖,CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
  7. RecyclerView实现多type页面
  8. OpenJDK源码研究笔记(六)--观察者模式工具类(Observer和Observable)和应用示例
  9. 联合索引会创建几个索引_联合索引在B+树上的存储结构及数据查找方式
  10. Windows 8(Windows Developer Preview)先体验
  11. VOSviewer初步学习
  12. 如何通过带坐标信息的照片生成轨迹
  13. Java 实现 百度地图
  14. UI设计师未来的发展趋势
  15. Url跳转和伪静态html解决方案
  16. Excel 正则表达式的用法
  17. 基于javaweb物业管理系统的设计与实现/小区物业管理系统
  18. 淘宝联盟(淘客)常用接口整理
  19. AD 绘图专题:无法切换中间层、无法中间层走线
  20. python监听串口数据_python 读取串口数据的示例

热门文章

  1. win10 u盘 修复计算机,怎么用u盘修复windows10专业版系统
  2. 提交百度快速收录真的能达到秒收录吗
  3. python 空数组_Python笔记
  4. 解决VMware安装ubuntu16.04后无法全屏的问题
  5. 实现virtual box虚拟机窗口全屏显示
  6. Wordpress采集开心版,免费Wordpress采集发布伪原创
  7. Html5中鼠标经过图片,图片在盒子内部实现放大效果。
  8. VB操作EXCEL表的常用方法
  9. CSS 教程(全)+代码
  10. 程序员是如何买房的?