java 爬蟲_Java原生代碼實現爬蟲(爬取小說)

Java也能做爬蟲。

現在提到爬蟲人第一個想到的就是python,其實使用Java編寫爬蟲也是很好的選擇,Java成熟的爬蟲框架很多,下面給大家展示一個使用Java基礎語言編寫的爬取小說的案例:

實現功能:

爬取目標網站全本小說

代碼編寫環境:

JDK:1.8.0_191

Eclipse:2019-03 (4.11.0)

素材:

網站:http://www.shicimingju.com(如有侵權,請聯系我刪除,謝謝)

小說:三國演義

案例實現用到的技術:

正則表達式

Java網絡通信:URL

IO流

Map—HashMap

字符串操作

異常處理

代碼思路:

  1. 根據小說存放位置創建file對象
  2. 根據網頁結構編寫正則,創建pattern對象
  3. 編寫循環,創建向所有小說章節頁面發起網絡請求的url對象
  4. 網絡流BufferReader
  5. 創建輸入流
  6. 循環讀取請求得到的內容,使用正則匹配其中的內容
  7. 將讀取到的內容寫入本地文件,知道循環結束
  8. 注意代碼中的異常處理

案例代碼:

案例代碼:package com.qianfeng.text;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern;public class GetText {public static void main(String[] args) {// 1、根據小說存放位置創建file對象File file = new File("D:Filehree_guo.txt");// 2、根據網頁結構編寫正則,創建pattern對象String regex_content = "(.*?)";String regex_title = "(.*?)";Pattern p_content = Pattern.compile(regex_content);Pattern p_title = Pattern.compile(regex_title);Matcher m_content;Matcher m_title;// 3、編寫循環,創建向所有小說章節頁面發起網絡請求的url對象for (int i = 1; i <= 120; i++) {System.out.println("第" + i + "章開始下載。。。");try {// 創建每一個頁面的url對象URL url = new URL("http://www.shicimingju.com/book/sanguoyanyi/" + i + ".html");// 創建網絡讀取流BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),"utf8"));// 4、讀取網絡內容網絡流BufferReaderString str = null;// 5、創建輸入流BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true)));while ((str = reader.readLine()) != null) {m_title = p_title.matcher(str.toString());m_content = p_content.matcher(str.toString());// 獲取小說標題并寫入本地文件Boolean isEx = m_title.find();if (isEx) {String title = m_title.group();// 清洗得到的數據title = title.replace("", "").replace("", "");System.out.println(title);writer.write("第" + i + "章:" + title + "");}while (m_content.find()) {String content = m_content.group();// 清洗得到的數據content = content.replace("

", "").replace("

", "").replace(" ", "").replace("?", "");// 把小說內容寫入文件writer.write(content + ""); }}System.out.println("第" + i + "章下載完成.........");writer.write("");writer.close();reader.close();} catch (Exception e) {System.out.println("下載失敗");e.printStackTrace();}}}}

運行效果:

b15d0afce1b716e76fdfc744868bf857.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457770.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS window對象 Location對象 location用于獲取或設置窗體的URL,并且可以用于解析URL。 語法: location.[屬性|方法]...

Location對象 location用于獲取或設置窗體的URL&#xff0c;并且可以用于解析URL。 語法: location.[屬性|方法] location對象屬性圖示: location 對象屬性&#xff1a; location 對象方法: 任務 在右邊編輯器script標簽內&#xff0c;獲取當前顯示文檔的URL,并輸出。 <!DOC…

ansible inventory 主機清單配置

文章目錄 環境介紹 ansible ssh配置 操作測試/etc/hosts 配置Inventory文件 主機與組主機變量、組變量把一個組變成另一個組的子成員變量太多了&#xff0c;不好管理怎么辦&#xff1f;來&#xff0c;分文件定義主機變量和組變量 操作環境介紹 為了練習方便&#xff0c;本次使…

python(26)查看文件的大小

有時候&#xff0c;在寫文件的時候需要判斷文件的大小&#xff0c;或者刪除空的文件 import os from os.path import join, getsizedef getdirsize(dir):size 0Lfor root, dirs, files in os.walk(dir):print filesfor name in files:print nameprint join(root,name) #輸出文…

java 數據結構_Java版-數據結構-隊列(數組隊列)

前言看過筆者前兩篇介紹的 Java版數據結構 數組和 棧的盆友&#xff0c;都給予了筆者一致的好評&#xff0c;在這里筆者感謝大家的認可&#xff01;&#xff01;&#xff01;由于本章介紹的數據結構是 隊列&#xff0c;在隊列的實現上會基于前面寫的 動態數組來實現&#xff0c…

ssh 介紹 和使用 程序不掛起

目錄 SSH的安全機制 SSH的安裝 啟動服務器的SSH服務 SSH兩種級別的遠程登錄 SSH的高級應用 Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的安全網絡協議。它是專為遠程登錄會話(甚至可以用Windows遠程登錄Linux服務器進行…

corpus? academic writing

http://micusp.elicorpora.info/ http://corpus.byu.edu/coca/ http://rcpce.engl.polyu.edu.hk/RACorpus/轉載于:https://www.cnblogs.com/gisalameda/p/5590034.html

vim命令練習題。

練習題。1. vi 與 vim 有什么區別呢&#xff0c;它們之間有什么關系&#xff1f;答&#xff1a;vi 和vim最大的區別就是編輯一個文本時&#xff0c;vi不會顯示顏色&#xff0c;而vim會顯示顏色。顯示顏色更易于用戶進行編輯。vim的這些優勢主要體現在以下幾個方面&#xff1a;1…

java 四舍五入_Java常用類

每個人的心里&#xff0c;都藏著一個了不起的自己&#xff0c;只要你不頹廢&#xff0c;不消極&#xff0c;一直悄悄醞釀著樂觀&#xff0c;培養著豁達&#xff0c;堅持著善良&#xff0c;只要在路上&#xff0c;就沒有到達不了的遠方&#xff01;BigInteger在Java中&#xff0…

Sublime 插件- px 轉rem

一個CSS的px值轉rem值的Sublime Text 3自動完成插件。 插件效果如下&#xff1a; 安裝 克隆項目 https://github.com/hyb628/cssrem.git進入packages目錄&#xff1a;Sublime Text -> Preferences -> Browse Packages...復制下載的cssrem目錄到剛才的packges目錄里。重…

ansible 批量部署ssh免密鑰

1 創建ssh秘鑰 yum install epel-release -y yum install sshpass -y ssh-keygen -t rsa 2 批量復制秘鑰并授權 ansible web -m shell -a ‘mkdir ~/.ssh’ -k ansible web -m copy -a ‘src~/.ssh/id_rsa.pub dest~/.ssh/authorized_keys mode0600’ -k 3 測試 ssh 10.0.0.2…

window8下安裝RabbitMQ

2019獨角獸企業重金招聘Python工程師標準>>> 1.下載并安裝erlang&#xff0c;http://www.erlang.org/download.html。64位的下載的是otp_win64_19.1.exe 查看是否安裝成功&#xff1a; 2.下載RabbitMQ,最新版是2.8.1&#xff0c;http://www.rabbitmq.com/releases/r…

python如何避免轉義字符_如何解決因轉義字符而報錯的問題(在使用python導入文件時)...

有些萌新在初次使用python導入文件時&#xff0c;可能會遇到遇到各種各樣的報錯。今天我們就來講講其中最常見的一種報錯---轉義字符“\”沖突。問題重述&#xff1a;比如像下面這樣&#xff0c;當我們想導入一個常見的csv文件時&#xff0c;發現居然報了這樣一個錯誤&#xff…

同意條款按鈕可用

// 同意條款function isaccepted(){ if(document.getElementById("read").checkedtrue){ document.getElementById("submit").disabled false; $(#submit).css("background","#f25618"); }else{ document.getElementById("s…

Ansible執行過程分析、異步模式和速度優化

Ansible系列(七)&#xff1a;執行過程分析、異步模式和速度優化 分類: Linux服務篇 undefined 我寫了更完善的Ansible專欄文章&#xff1a;一步到位玩兒透Ansible Ansible系列文章&#xff1a;http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible執行過程分析 …

gdb 收到SIGPIPE信號

2019獨角獸企業重金招聘Python工程師標準>>> handle SIGPIPE noprint nostop 轉載于:https://my.oschina.net/u/1176097/blog/761957

列的數目比列的名字要多_你們要的甘特圖來啦!還有具體做法哦!

作為項目的負責人&#xff0c;“時間管理”也是極為重要的一環。甘特圖作為常用的項目管理工具之一&#xff0c;有助于把一個大型項目劃分為幾個小部分&#xff0c;并有條理地展示。甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。以提出者亨利勞倫斯甘特(Henry Laurenc…

圖片處理拓展篇 : 圖片轉字符畫(ascii)

首先要明確思路, 圖片是由像素組成的, 不同的像素有不同的顏色(rgb), 那么既然我們要轉化為字符畫, 最直接的辦法就是利用字符串來替代像素, 也就是用不同的字符串來代表不同的像素. 另外圖片一般來講是彩色的, 而acsii(一般打印在終端上吧) 都是黑白的, 此時就要介紹另外一個概…

使用fping 查看局域網中有哪些ip

安裝 fping arp-get install fping 使用方法 fping -g 自己ip地址/24 使用 nmap 也可以查看 但是速度慢些 nmap 功能比fping 功能強大 nmap -sP 自己ip地址/24

算法題:判斷字符串是否為 ipv4 地址

#include <stdio.h>typedef char bool; #define true 1 #define false 0/**1.判斷字符串是否形如“192.168.1.1”2.字符串兩端含有空格視為合法ip&#xff0c;形如“ 192.168.1.1 ”3.字符串中間含有空格視為非法ip&#xff0c;形如“192.168. 1.2”4.字符串0開頭視…

未捕獲typeerror: $形象。cropper不是函數_沒有學不會的python--細說自定義函數的細節...

沒有學不會的python函數是什么&#xff1f;老調常談&#xff0c;還是那老一套&#xff0c;學習一個東西前&#xff0c;先搞懂是什么&#xff0c;再來學習怎么用。函數函數&#xff0c;如果你是剛經歷過高考肯定很熟悉&#xff0c;數學中就經常出現這個名詞&#xff0c;比如什么…