Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美激情(一区二区三区),亚洲酒色1314狠狠做,欧美在线成人免费国产

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML大文件上傳源代碼

          TML大文件上傳源代碼,HTML大文件上傳解決方案,HTML大文件上傳思路,HTML大文件上傳實例,HTML大文件分塊上傳,HTML大文件分片上傳,HTML大文件批量上傳,HTML大文件加密上傳,HTML文件夾上傳,HTML大文件多線程上傳,


          隨著視頻網站和大數據應用的普及,特別是高清視頻和4K視頻應用的到來,超大文件上傳已經成為了日常的基礎應用需求。

          但是在很多情況下,平臺運營方并沒有大文件上傳和斷點續傳的開發經驗,往往在網上找一些簡單的PHP或者Java程序來實現基本的上傳功能,然而在實際使用中會發現,這些基于腳本語言實現的上傳功能模塊性能很弱,一是不支持2GB以上的內容上傳;二是無法支持斷點續傳;三是效率極低,單臺服務器最多支持幾十個并發上傳連接。

          當前我們要搭建一個運營級的視頻服務平臺,在嘗試了各種產品均無法滿足要求,因此最后花精力自主用C++語言實現了這一高性能上傳服務器。

          而基于PHP、JAVA等技術實現的文件上傳服務天生無法支持超大文件上傳,無法逾越2GB的最大文件尺寸瓶頸;

          支持4GB以上超大文件上傳,文件大小不受限制;

          支持斷點續傳,斷網、關機重啟均不受影響;

          對于大文件的處理,無論是用戶端還是服務端,如果一次性進行讀取發送、接收都是不可取,很容易導致內存問題。所以對于大文件上傳,采用切塊分段上傳

          從上傳的效率來看,利用多線程并發上傳能夠達到最大效率。

          文件上傳頁面的前端可以選擇使用一些比較好用的上傳組件,例如百度的開源組件WebUploader,這些組件基本能滿足文件上傳的一些日常所需功能,如異步上傳文件,文件夾,拖拽式上傳,黏貼上傳,上傳進度監控,文件縮略圖,甚至是大文件斷點續傳,大文件秒傳。

          在web項目中上傳文件夾現在已經成為了一個主流的需求。在OA,或者企業ERP系統中都有類似的需求。上傳文件夾并且保留層級結構能夠對用戶行成很好的引導,用戶使用起來也更方便。能夠提供更高級的應用支撐。


          導入項目:
          導入到Eclipse:
          http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
          導入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
          springboot統一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2



          下載示例:

          https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/




          工程



          NOSQL

          NOSQL示例不需要任何配置,可以直接訪問測試



          創建數據表

          選擇對應的數據表腳本,這里以SQL為例




          修改數據庫連接信息


          訪問頁面進行測試



          文件存儲路徑

          up6/upload/年/月/日/guid/filename






          相關問題:
          1.javax.servlet.http.HttpServlet錯誤
          2.項目無法發布到tomcat
          3.md5計算完畢后卡住
          4.服務器找不到config.json文件

          相關參考:

          文件保存位置


          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl



          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

          產品源代碼:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
          授權生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1

          java就業班」2019從網頁搭建入門JavaWeb

          來百度APP暢享高清圖片

          //下栽のke:chaoxingit.com/1534/

          從網頁搭建入門到JavaWeb:2019版詳解

          一、引言

          隨著互聯網技術的飛速發展,JavaWeb已經成為了一種非常流行的開發技術。通過JavaWeb,我們可以快速地構建出功能強大、安全可靠的Web應用程序。本文將詳細介紹如何從網頁搭建入門到JavaWeb,幫助你掌握這門技術。

          二、JavaWeb簡介

          JavaWeb指的是使用Java技術開發的Web應用程序。它是基于Java平臺的一種開發模式,用于構建和部署在Web服務器上運行的應用程序。JavaWeb通常涉及以下關鍵組件和技術:

          1. Servlet: Servlet是Java編寫的服務器端程序,主要用于處理HTTP請求和生成HTTP響應。它們運行在支持Servlet規范的Web服務器上,如Apache Tomcat、Jetty等。
          2. JSP(JavaServer Pages): JSP是一種服務器端的Java技術,用于創建動態Web頁面。JSP頁面可以包含HTML、Java代碼片段和JSP標簽庫,它們會在服務器端被解析和執行,最終生成HTML響應發送給客戶端。
          3. Servlet容器: Servlet容器是一個Web服務器組件,用于管理和執行Servlet。它負責將HTTP請求路由到相應的Servlet,并將Servlet生成的響應發送回客戶端。
          4. JDBC(Java Database Connectivity): JDBC是Java提供的用于與數據庫交互的API。它允許Java應用程序通過標準的數據庫操作語句與各種關系型數據庫進行通信。
          5. Web容器: Web容器是一種用于托管和運行Web應用程序的環境。它提供了Servlet容器、JSP引擎以及其他必要的組件,使得開發者可以部署和管理JavaWeb應用程序。
          6. MVC架構(Model-View-Controller): MVC是一種常用的設計模式,用于將應用程序分為三個核心部分:模型(Model)、視圖(View)和控制器(Controller)。在JavaWeb開發中,開發者通常使用MVC架構來組織和管理應用程序的代碼。
          7. Web框架: JavaWeb開發中常用的框架包括Spring MVC、Struts、JSF(JavaServer Faces)等。這些框架提供了各種功能和工具,簡化了開發過程,并提高了代碼的可維護性和可擴展性。

          JavaWeb應用程序通常遵循HTTP協議,與客戶端通過HTTP請求和響應進行通信。它們可以處理各種類型的請求,包括GET、POST等,并能夠生成動態內容以及與數據庫等外部資源進行交互。 JavaWeb的發展已經成為構建企業級應用程序的主流方式之一,它提供了強大的功能和豐富的生態系統,使得開發者能夠構建高性能、可靠和安全的Web應用程序。

          三、學習資源

          要想入門JavaWeb,你可以選擇以下學習資源:

          1. 官方文檔:Java官方文檔提供了豐富的JavaWeb學習資源,包括API文檔、框架文檔和教程等。
          2. 培訓課程:網絡上有很多免費的JavaWeb培訓課程,這些課程可以幫助你快速入門。
          3. 書籍:閱讀一些經典的JavaWeb書籍,如《Head First Servlets and JavaServer Pages》等,可以幫助你深入理解JavaWeb技術。

          四、搭建開發環境

          搭建JavaWeb開發環境涉及到幾個主要組件,包括Java Development Kit (JDK)、集成開發環境(IDE)、Servlet容器等。以下是從頭開始搭建JavaWeb開發環境的步驟:

          1. 安裝Java Development Kit (JDK):
          • 首先,你需要安裝Java Development Kit,它包含了Java編譯器(javac)和Java運行時環境(JRE)。
          • 前往Oracle JDK官網或OpenJDK官網下載并安裝最新版本的JDK。
          • 設置JAVA_HOME環境變量,指向你的JDK安裝目錄。
        1. 安裝集成開發環境(IDE):
          • 選擇一個JavaWeb開發的IDE。Eclipse、IntelliJ IDEA和NetBeans是常見的選擇。
          • 下載并安裝你選擇的IDE。例如,你可以在IntelliJ IDEA官網下載IntelliJ IDEA。
        2. 安裝Servlet容器:
          • 選擇一個Servlet容器,例如Apache Tomcat。
          • 前往Apache Tomcat官網下載最新版本的Tomcat。
          • 解壓下載的文件到你想要安裝的目錄。
        3. 創建JavaWeb項目:
          • 打開你的IDE,創建一個新的JavaWeb項目。
          • 在項目中配置Servlet容器,以便在開發過程中能夠輕松部署和調試。
        4. 編寫第一個Servlet:
          • 在項目中創建一個Servlet類,這是JavaWeb應用程序的基本處理單元。
          • 實現doGet和/或doPost方法,用于處理HTTP請求和生成HTTP響應。
        5. 配置Servlet容器:
          • 配置Servlet容器,告訴它在哪里找到你的Web應用程序。
          • 在Tomcat中,你需要配置server.xml文件,添加一個新的<Context>元素,指向你的項目目錄。
        6. 部署和運行:
          • 將你的JavaWeb項目部署到Servlet容器中。
          • 啟動Servlet容器,查看你的JavaWeb應用程序是否成功運行。
        7. 學習HTML和基本前端知識:
          • JavaWeb開發通常涉及與前端進行交互,因此學習HTML和基本的前端知識對于構建用戶界面是很有幫助的。

          在完成上述步驟后,你就建立了一個基本的JavaWeb開發環境,并且能夠開始編寫和部署簡單的Web應用程序。從這里開始,你可以深入學習JavaWeb的各個方面,包括Servlet、JSP、數據庫連接等,以構建更復雜和功能豐富的Web應用程序。

          五、網頁搭建基礎

          網頁搭建是學習JavaWeb的基礎,主要包括HTML、CSS和JavaScript等基礎知識。通過學習這些基礎知識,你可以快速搭建出基本的網頁。

          六、JavaWeb核心技術

          JavaWeb 是使用 Java 技術進行 Web 開發的一種方式,它涵蓋了多個核心技術和框架。以下是 JavaWeb 的一些核心技術:

          1. Servlet:
          • Servlet 是運行在服務器端的 Java 應用程序,主要用于處理客戶端的請求并生成響應。
          • Servlet 繼承自 javax.servlet.Servlet 接口,通過覆蓋 doGet 和 doPost 等方法來處理不同類型的 HTTP 請求。
        8. JSP (JavaServer Pages):
          • JSP 允許在 HTML 頁面中嵌入 Java 代碼,它最終會被翻譯成 Servlet。
          • JSP 提供了簡化開發的方式,允許開發人員在頁面中使用標簽庫來調用 JavaBean 等組件。
        9. Servlet容器:
          • Servlet 容器是一個 Web 服務器或應用服務器組件,負責管理 Servlet 的生命周期、請求和響應。
          • 常見的 Servlet 容器包括 Apache Tomcat、Jetty 和 WildFly。
        10. JavaBeans:
          • JavaBeans 是一種可重用的 Java 組件,通常用于在 Web 應用程序中封裝數據和業務邏輯。
          • 在 JavaWeb 中,JavaBeans 可以被用于從數據庫中獲取數據、在頁面中展示數據等任務。
        11. JDBC (Java Database Connectivity):
          • JDBC 是 Java 用于與數據庫進行交互的 API。
          • 在 JavaWeb 開發中,使用 JDBC 可以連接數據庫、執行 SQL 查詢和更新等操作。
        12. JPA (Java Persistence API):
          • JPA 是 Java 用于對象關系映射(ORM)的 API,簡化了 Java 對象與數據庫表之間的映射。
          • Hibernate、EclipseLink 等框架實現了 JPA 規范,使得持久化操作更加方便。
        13. Spring框架:
          • Spring 是一個綜合性的 Java 開發框架,提供了依賴注入、面向切面編程、事務管理等功能。
          • Spring 的模塊中有 Spring MVC 用于構建 Web 應用,Spring Boot 則簡化了 Spring 應用程序的搭建。
        14. Struts框架:
          • Struts 是一個基于 MVC 模式的 Web 應用框架,用于簡化開發復雜的 Web 應用程序。
          • Struts 的核心是一個控制器,負責接收用戶請求,并將其分發給相應的處理器(Action)。
        15. Web Services:
          • JavaWeb 中常用的 Web 服務技術包括 SOAP(Simple Object Access Protocol)和 REST(Representational State Transfer)。
          • JAX-RS(Java API for RESTful Web Services)是 Java EE 中用于構建 RESTful Web 服務的 API。
        16. Security:
          • JavaWeb 應用程序的安全性是至關重要的。Java 提供了一些安全機制,例如 Java Authentication and Authorization Service (JAAS) 和 Java Security Architecture。

          以上是 JavaWeb 的一些核心技術,這些技術一起構成了一個完整的 JavaWeb 開發生態系統。開發人員可以根據項目需求選擇適當的技術和框架來構建穩健、高效的 Web 應用程序。

          七、實踐項目

          實踐項目是學習JavaWeb的重要環節,你可以選擇以下項目進行實踐:

          1. 創建一個簡單的Web應用程序,包括用戶注冊、登錄和信息展示等功能;
          2. 實現一個博客網站,包括文章列表、評論和發布等功能;
          3. 與第三方API進行交互,實現一個基于API的移動應用程序。

          通過實踐項目,你可以更好地掌握JavaWeb技術,并提高自己的編程能力和團隊協作能力。

          八、總結與展望

          通過本文的介紹,相信你已經對從網頁搭建入門到JavaWeb有了更深入的了解。要想成為一名優秀的JavaWeb開發者,你需要不斷學習、實踐和總結。同時,隨著技術的不斷發展,你需要不斷關注新技術和趨勢,并努力提升自己的技能水平。希望本文能夠幫助你成功邁向后端工程師的高階之路!

          大數據環境下,數據分析已由業務驅動轉變為數據驅動,網絡數據資源呈指數級增長,且散落在不同的數據源之中。對大多數企業和研究者而言,用“數據說話”仿佛成了大數據時代的重要武器。網絡爬蟲作為網絡數據獲取的重要技術,受到了越來越多數據需求者的青睞和追捧。

          作為網絡爬蟲的入門采用 Java 開發語言,內容涵蓋了網絡爬蟲的原理以及開發邏輯,Java 網絡爬蟲基礎知識,網絡抓包介紹,jsoup 的介紹與使用,HttpClient 的介紹與使用等內容。本課程在介紹網絡爬蟲基本原理的同時,注重具體的代碼實現,加深讀者對爬蟲的理解,加強讀者的實戰能力。

          內容

          第01課:網絡爬蟲原理

          引言

          隨著互聯網的迅速發展,網絡資源越來越豐富,信息需求者如何從網絡中抽取信息變得至關重要。目前,有效的獲取網絡數據資源的重要方式,便是網絡爬蟲技術。簡單的理解,比如您對百度貼吧的一個帖子內容特別感興趣,而帖子的回復卻有1000多頁,這時采用逐條復制的方法便不可行。而采用網絡爬蟲便可以很輕松地采集到該帖子下的所有內容。

          網絡爬蟲技術最廣泛的應用是在搜索引擎中,如百度、Google、Bing 等,它完成了搜索過程中的最關鍵的步驟,即網頁內容的抓取。下圖為簡單搜索引擎原理圖。

          網絡爬蟲的作用,我總結為以下幾點:

          • 輿情分析:企業或政府利用爬取的數據,采用數據挖掘的相關方法,發掘用戶討論的內容、實行事件監測、輿情引導等。
          • 企業的用戶分析:企業利用網絡爬蟲,采集用戶對其企業或商品的看法、觀點以及態度,進而分析用戶的需求、自身產品的優劣勢、顧客抱怨等。
          • 科研工作者的必備技術:現有很多研究都以網絡大數據為基礎,而采集網絡大數據的必備技術便是網絡爬蟲。利用網絡爬蟲技術采集的數據可用于研究產品個性化推薦、文本挖掘、用戶行為模式挖掘等。

          網絡爬蟲涉及的領域包括:

          網絡爬蟲的基本概念

          網絡爬蟲(Web Crawler),又稱為網絡蜘蛛(Web Spider)或 Web 信息采集器,是一種按照一定規則,自動抓取或下載網絡信息的計算機程序或自動化腳本,是目前搜索引擎的重要組成部分。

          • 狹義上理解:利用標準的 HTTP 協議,根據網絡超鏈接(如https://www.baidu.com/)和 Web 文檔檢索的方法(如深度優先)遍歷萬維網信息空間的軟件程序。
          • 功能上理解:確定待爬的 URL 隊列,獲取每個 URL 對應的網頁內容(如 HTML/JSON),解析網頁內容,并存儲對應的數據。

          網絡爬蟲的分類

          網絡爬蟲按照系統架構和實現技術,大致可以分為以下幾種類型:通用網絡爬蟲(General Purpose Web Crawler)、聚焦網絡爬蟲(Focused Web Crawler)、增量式網絡爬蟲(Incremental Web Crawler)、深層網絡爬蟲(Deep Web Crawler)。實際的網絡爬蟲系統通常是幾種爬蟲技術相結合實現的。

          • 通用網絡爬蟲:爬行對象從一些種子 URL 擴充到整個 Web,主要為門戶站點搜索引擎和大型 Web 服務提供商采集數據
          • 通用網絡爬蟲的爬取范圍和數量巨大,對于爬行速度和存儲空間要求較高,對于爬行頁面的順序要求較低,通常采用并行工作方式,有較強的應用價值。
          • 聚焦網絡爬蟲,又稱為主題網絡爬蟲:是指選擇性地爬行那些與預先定義好的主題相關的頁面。
          • 和通用爬蟲相比,聚焦爬蟲只需要爬行與主題相關的頁面,極大地節省了硬件和網絡資源,保存的頁面也由于數量少而更新快,可以很好地滿足一些特定人群對特定領域信息的需求。
          • 通常在設計聚焦網絡爬蟲時,需要加入鏈接和內容篩選模塊。一個常見的案例是基于關鍵字獲取符合用戶需求的數據,如下圖所示:


          • 增量網絡爬蟲:對已下載網頁采取增量式更新和只爬行新產生的或者已經發生變化網頁的爬蟲,它能夠在一定程度上保證所爬行的頁面是盡可能新的頁面,歷史已經采集過的頁面不重復采集。
          • 增量網絡爬蟲避免了重復采集數據,可以減小時間和空間上的耗費。通常在設計網絡爬蟲時,需要在數據庫中,加入時間戳,基于時間戳上的先后,判斷程序是否繼續執行。
          • 常見的案例有:論壇帖子評論數據的采集(如下圖所示論壇的帖子,它包含400多頁,每次啟動爬蟲時,只需爬取最近幾天用戶所發的帖子);天氣數據的采集;新聞數據的采集;股票數據的采集等。


          • Deep Web 爬蟲:指大部分內容不能通過靜態鏈接獲取,只有用戶提交一些表單信息才能獲取的 Web 頁面。例如,需要模擬登陸的網絡爬蟲便屬于這類網絡爬蟲。另外,還有一些需要用戶提交關鍵詞才能獲取的內容,如京東淘寶提交關鍵字、價格區間獲取產品的相關信息。


          網絡爬蟲的流程

          網絡爬蟲基本流程可用下圖描述:

          具體流程為:

          1. 需求者選取一部分種子 URL(或初始 URL),將其放入待爬取的隊列中。如在 Java 網絡爬蟲中,可以放入 LinkedList 或 List 中。
          2. 判斷 URL 隊列是否為空,如果為空則結束程序的執行,否則執行第三步驟。
          3. 從待爬取的 URL 隊列中取出待爬的一個 URL,獲取 URL 對應的網頁內容。在此步驟需要使用響應的狀態碼(如200,403等)判斷是否獲取數據,如響應成功則執行解析操作;如響應不成功,則將其重新放入待爬取隊列(注意這里需要移除無效 URL)。
          4. 針對已經響應成功后獲取到的數據,執行頁面解析操作。此步驟根據用戶需求獲取網頁內容里的部分數據,如汽車論壇帖子的標題、發表的時間等。
          5. 針對3步驟已解析的數據,將其進行存儲。

          網絡爬蟲的爬行策略

          一般的網絡爬蟲的爬行策略分為兩種:深度優先搜索(Depth-First Search)策略、廣度優先搜索(Breadth-First Search)策略

          • 深度優先搜索策略:從根節點的 URL 開始,根據優先級向下遍歷該根節點對應的子節點。當訪問到某一子節點 URL 時,以該子節點為入口,繼續向下層遍歷,直到沒有新的子節點可以繼續訪問為止。接著使用回溯的方法,找到沒有被訪問到的節點,以類似的方式進行搜索。下圖給出了理解深度優先搜索的一個簡單案例:


          • 廣度優先搜索策略:也稱為寬度優先,是另外一種非常有效的搜索技術,這種方法按照層進行遍歷頁面。下圖可幫助理解廣度優先搜索的遍歷方式:


          基于廣度優先的爬蟲是最簡單的爬取網站頁面的方法,也是目前使用較為廣泛的方法。在本達人課中,所講的案例皆為寬度優先式的爬蟲。

          學習建議

          網絡爬蟲是入門某一門編程語言的實戰技術:很多學習編程語言(如 Java、Python 或 C++ 等)的同學,采用的方式只看書或在網絡上看一些視頻,而這將導致的后果就是面對一個具體項目時,不知道如何上手,尤其對新手而言。或者,一段時間后,就將之前的書本內容或視頻內容遺忘了。

          為此,我建議這些學習者可采用網絡爬蟲技術入門某一門編程語言(如 Java、Python)。因為爬蟲技術是個綜合性很強的技術,涉及到編程語言的很多方面。本達人課特別選用了 Java 作為開發語言,將帶大家深入了解 Java 網絡爬蟲背后的核心技術。學完該課程,相信您也已很好地入門 Java 編程語言。

          對于零基礎入門 Java 網絡爬蟲的同學,在學習過程中請注意以下幾點:

          • 理解爬蟲的基本原理。
          • 學習 Java 網絡爬蟲涉及的基礎知識:基礎不牢,地動山搖,學習和掌握網絡爬蟲的基礎知識很重要。
          • 吃透基本的爬蟲代碼,并在此基礎上進行改寫。
          • 不斷實戰,發現爬蟲中涉及的新問題,并解決問題。

          最后,提供一些書籍和資料,給入門以及想深入學習 Java 網絡爬蟲的讀者:

          1. 《Java面向對象程序設計》(耿祥義、張躍平編著),由清華大學出版社出版,這是大學的教材,可作為基礎學習。
          2. 《Java核心技術》全2冊。
          3. 《Effective Java (3rd Edition)》:目前英文版已是第三版,中文版還在第二版,該書是 Java 進階必備之書,英文比較好的同學可直接看英文版。
          4. 《自己動手寫網絡爬蟲》(羅剛編著),國內第一本專門講解 Java 網絡爬蟲的書籍。

          第02課:Java 網絡爬蟲基礎知識

          引言

          Java 網絡爬蟲具有很好的擴展性可伸縮性,其是目前搜索引擎開發的重要組成部分。例如,著名的網絡爬蟲工具 Nutch 便是采用 Java 開發,該工具以 Apache Hadoop 數據結構為依托,提供了良好的批處理支持。

          Java 網絡爬蟲涉及到 Java 的很多知識。本篇中將會介紹網絡爬蟲中需要了解的 Java 知識以及這些知識主要用于網絡爬蟲的哪一部分,具體包括以下內容:

          • Maven 的使用;
          • log4j 的使用;
          • 對象的創建;
          • 集合的使用;
          • 正則表達式的使用;
          • HTTP 狀態碼;
          • 其他。

          Maven 的使用

          Maven 是什么

          Maven 是由 Apache 軟件基金會所提供一款工具,用于項目管理及自動構建。我們知道在構建一個 Java 工程時,需要使用到很多 Jar 包,例如操作數據庫需要使用到 mysql-connector-java 以及其相關依賴的 Jar 包。而 Maven 工具便可以很方便的對我們在項目中使用到的開源 Jar 包,進行很好的管理,比如下載某 Java 工程需要的 Jar 包及相關依賴 Java 包。

          Maven 如何使用

          Maven 使用項目對象模型(Project Object Model,POM)來配置,項目對象模型存儲在名為 pom.xml 的文件中。以 Java 為例,我們可以在 Eclipse 中創建一個 Maven 工程。其中,Maven Dependencies 便存放著由 Maven 管理的 Jar 包。

          正如前面所說,構建一個 Java 工程需要使用很多 Jar 包,比如,在 Java 網絡爬蟲中,我們需要用到數據庫連接、請求網頁內容、解析網頁內容的相關 Jar 包時,我們可以在上圖所示的 pom 文件中添加如下語句:

          <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version></dependency><dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version> 1.8.2</version></dependency><dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient </artifactId> <version> 4.2.3</version></dependency>

          之后,我們會驚訝地發現,工程的 Maven Dependencies 中自動下載了相關 Jar 包以及其依賴的 Jar 包。

          讀者可以在 Maven Repository 網站中檢索自己想要的 Jar 包,以及 Maven 操作語句。

          log4j 的使用

          log4j 是什么

          log4j 是一個基于 Java 的日志記錄工具,曾是 Apache 軟件基金會的一個項目。目前,日志是應用軟件中不可或缺的部分。

          log4j 怎么使用

          1. 使用 Maven 下載 log4j 的 Jar 包,代碼如下:

          <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>

          2. 在 src 目錄下創建 log4j.properties 文本文件,并做相關配置(關于每個配置的具體含義,讀者可參考博文 《詳細的 Log4j 使用教程》):

          ### 設置###log4j.rootLogger = debug,stdout,D,E### 輸出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### 輸出DEBUG 級別以上的日志到=error.log ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = E://logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n### 輸出ERROR 級別以上的日志到=error.log ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =E://logs/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

          3. 實例程序,如下所示:

          package log4j;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class Test { static final Log logger = LogFactory.getLog(Test.class); public static void main(String[] args) { System.out.println("hello"); logger.info("hello world"); logger.debug("This is debug message."); logger.warn("This is warn message."); logger.error("This is error message."); }}

          基于此程序,我們就可以看到在我們工程的根目錄下會產生一個日志文件 error.log 和 log.log。

          在網絡爬蟲中,我們可以使用日志記錄程序可能出錯的地方,監控程序的運行狀態。

          對象的創建

          在 Java 中,經常使用 new 關鍵字來創建一個對象。例如,在爬取京東商品的id、product_name(商品名稱)、price(價格)時,我們需要將每個商品的信息封裝到對象里。

          JdInfoModel jingdongproduct = new JdInfoModel();

          在爬蟲中,我們要操作 JdInfoModel 類中的變量(即id、product_name、price),可以使用 private 變量定義的方式。并且,使用 set() 與 get() 方法對數據進行設置(爬取數據的封裝)和獲取使用(爬取數據的存儲)。下面的代碼為 JdInfoModel 類:

          package model;public class JdInfoModel { private int id; private String product_name; private double price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getProduct_name() { return product_name; } public void setProduct_name(String product_name) { this.product_name = product_name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }

          集合的使用

          網絡爬蟲離不開對集合的操作,這里涉及到 List、Set、Queue、Map 等集合的操作。

          List 和 Set 集合的使用

          List 的特征是其元素以線性方式存儲,集合中可以存放重復對象。對比而言,Set 集合中的對象不按特定的方式排序,并且沒有重復對象。在網絡爬蟲中,可以使用 List<String> 存儲待爬的 URL 列表。例如:

          //List集合的創建List<String> urllist = new ArrayList<String>();urllist.add("https://movie.douban.com/subject/27608425");urllist.add("https://movie.douban.com/subject/26968024");//第一種遍歷方式for( String url : urllist ){ System.out.println(url);}//第二種遍歷方式for( int i=0; i<urllist.size(); i++ ){ System.out.println(i+":"+urllist.get(i));}//第三種遍歷方式Iterator<String> it = urllist.iterator();while ( it.hasNext() ){ System.out.println(it.next());}

          同時我們也可以使用上面 List<JdInfoModel> 來封裝具體的實例,即爬蟲所采集到的數據。Set 集合的使用與 List 集合類似,這里就不過多講解了。

          Map 的使用

          Map 是一種把鍵對象和值對象進行映射的集合,它的每一個元素都包含一對鍵對象和值對象,其中鍵對象不可以重復。Map 不僅在網絡爬蟲中常用,也常在文本挖掘算法的編寫中使用。在網絡爬蟲中,可以使用 Map 過濾一些重復數據,但并建議使用 Map 對大規模數據去重過濾,原因是 Map 有空間大小的限制。比如,使用網絡爬蟲爬取帖子時,可能遇到置頂帖,而置頂帖可能會與下面的帖子重復出現。以下程序為 Map 的使用案例:

          //Map的創建Map<String,Integer> map = new HashMap<String,Integer>();//值的添加,這里假設是爬蟲中的產品id以及每個產品id對應的銷售量map.put("jd1515", 100);map.put("jd1516", 300);map.put("jd1515", 100);map.put("jd1517", 200);map.put("jd1518", 100);//第一種方法遍歷for (String key : map.keySet()) { Integer value = map.get(key); System.out.println("Key = " + key + ", Value = " + value); } //第二種方法遍歷Iterator<Entry<String, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Entry<String, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } //第三種方法遍歷for (Entry<String, Integer> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); }

          Queue 的使用

          隊列(Queue)使用鏈表結構存儲數據,是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的后端進行插入操作。LinkedList 類實現了 Queue 接口,因此我們可以把 LinkedList 當成 Queue 來用。Queue 常用來存待爬 URL 隊列。

          Queue<String> queue = new LinkedList<String>();//添加元素queue.offer("https://www.douban.com/people/46077896/likes/topic/");queue.offer("https://www.douban.com/people/1475408/likes/topic");queue.offer("https://www.douban.com/people/3853295/likes/topic/");boolean t = true;while (t) { //如果Url隊列為空,停止執行程序,否則請求Url if( queue.isEmpty() ){ t = false; }else { //請求的url String url = queue.poll(); System.out.println(url); //這里要寫請求數據,獲取相應狀態碼,如果狀態碼為200,則解析數據;如果為404,url移除隊列;否則該url重新如列 }

          正則表達式的使用

          正則表達式,是在解析數據(HTML 或 JSON 等)時,常用的方法。舉個列子,我想從下面的語句中提取用戶的 id(75975500):

          <a target="_blank" class="linkblack">尊少來自沈陽</a>

          后面,我會介紹解析工具 jsoup,其可以解析獲得“//i.autohome.com.cn/75975500”。接著,便可以使用正則表達式提取 75975500。

          String url = "http://i.autohome.com.cn/75975500";String user_id = url.replaceAll("\D", ""); //取代所有的非數字字符System.out.println(user_id); //輸出的結果即為75975500

          如下表所示,是 Java 中一些常用的基本正則表達式。

          正則表達式寫法含義\d代表0-9的任意數字\D代表任何非數字字符\s代表空格類字符\S代表非空格類字符\p{Lower}代表小寫字母[a-z]\p{Upper}代表大寫字母[A-Z]\p{Alpha}代表字母\p{Blank}代表空格或制表符

          HTTP 狀態碼

          當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收并顯示網頁前,此網頁所在的服務器會返回一個包含 HTTP 狀態碼的信息頭(Server Header)用以響應瀏覽器的請求。在網絡爬蟲向后臺請求一個 URL 地址時,便會返回狀態碼,該狀態碼中包含豐富的信息。例如,200表示請求成功,成功獲取到了后臺傳的數據(HTML 或 JSON 等);301資源(網頁等)被永久轉移到其它 URL;404請求的資源(網頁等)不存在等。以下是 HTTP 狀態碼的分類。

          分類描述1**信息,服務器收到請求,需要請求者繼續執行操作。2**成功,操作被成功接收并處理。3**重定向,需要進一步的操作以完成請求。4**客戶端錯誤,請求包含語法錯誤或無法完成請求。5**服務器錯誤,服務器在處理請求的過程中發生了錯誤。

          詳細的 HTTP 狀態碼列表,讀者可以參考這個地址。

          其他

          另外,網絡爬蟲還涉及到其他方面的 Java 知識,比如說Java 輸入輸出流、Java 操作數據庫、Java 多線程操作、Java 對日期的處理、Java 中的接口與繼承。所以,以網絡爬蟲,入門 Java 編程是非常好的方式。在后面的課程中,我會介紹網絡爬蟲如何使用這些技術。


          上一篇:HTML 元素
          下一篇:HTML 符號
          主站蜘蛛池模板: 蜜桃视频一区二区三区| 无码人妻久久一区二区三区蜜桃| 杨幂AV污网站在线一区二区| 天堂一区二区三区在线观看| 亚洲福利一区二区三区| 国产吧一区在线视频| 色一情一乱一区二区三区啪啪高| 一区二区三区在线观看| 国产aⅴ精品一区二区三区久久| 国产美女露脸口爆吞精一区二区| 国产一区二区三区精品久久呦| 久久久99精品一区二区| 国精产品一区二区三区糖心| 亚洲国产成人久久综合一区| 国产乱码精品一区二区三区四川人 | 日本在线视频一区二区三区| 无码人妻一区二区三区在线水卜樱| 成人区人妻精品一区二区不卡网站| 久久精品亚洲一区二区| 亚洲日韩一区精品射精| 一区二区手机视频| 亚洲中文字幕在线无码一区二区 | 波多野结衣高清一区二区三区| 亚洲AV美女一区二区三区 | 中文字幕亚洲乱码熟女一区二区| а天堂中文最新一区二区三区| 国产精品一区电影| 午夜福利国产一区二区| 一区二区三区午夜| 一区二区三区午夜| 人妻体体内射精一区二区| 夜精品a一区二区三区| 午夜福利一区二区三区高清视频| 免费看无码自慰一区二区 | 风间由美在线亚洲一区| 国产爆乳无码一区二区麻豆| 福利电影一区二区| 大香伊人久久精品一区二区| 亚洲老妈激情一区二区三区| 波多野结衣中文一区二区免费| 国产高清一区二区三区|