整合營銷服務商

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

          免費咨詢熱線:

          Java實現爬蟲技術Jsoup實例講解


          soup介紹

          Jsoup是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。


          Jsoup主要功能

          注冊中心:

          • 解析HTML:URL、文件或字符串中解析HTML。
          • 查找\取出數據:使用DOM或CSS選擇器來查找、取出數據。
          • 操作HTML(增冊改):可操作HTML元素、屬性、文本。



          以實例來講解Jsoup使用

          步驟:創建項目、pom.xml引入、創建啟動類、運行項目。



          中文偽代碼

          需求:我們要爬取Docker技術文章,這個網站頁面左邊為菜單,右邊為內容。

          經過分析:菜單里的url,是在css的class:left-navigation下面的a標簽下,并且url以/article/index/開始的。

          內容:直接在css的class:article_content下面的html。開始寫代碼了:

          • 首先:抓取網頁:Document doc = Jsoup.connect(purl).get()。
          • 開始用Jsoup對doc的查找來取得菜單,代碼里是handleParent方法里面。
          • 得到所有的菜單url,我們就可以開始抓取全部頁面。
          • 還是Document doc = Jsoup.connect(srcurl).get();這句把網頁抓取下來
          • 開始用Jsoup對doc的查找,標題、關鍵詞、描述,內容。打日志顯示出來。

          pom.xml引入


          <dependency>
           <groupId>org.jsoup</groupId>
           <artifactId>jsoup</artifactId>
           <version>1.11.3</version>
          </dependency>

          創建啟動類

          .Jsoup簡述

          Java中支持的爬蟲框架有很多,比如WebMagic、Spider、Jsoup等。今天我們使用Jsoup來實現一個簡單的爬蟲程序。

          ?Jsoup擁有十分方便的api來處理html文檔,比如參考了DOM對象的文檔遍歷方法,參考了CSS選擇器的用法等等,因此我們可以使用Jsoup快速地掌握爬取頁面數據的技巧。

          2.快速開始

          1)編寫HTML頁面

          <html>

          <head>

          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

          <title>Insert title here</title>

          </head>

          <body>

          <table>

          <thead>

          <tr>

          <td>商品名字</td>

          <td>商品圖片</td>

          </tr>

          </thead>

          <tbody>

          <tr>

          <td class="pname">product1</td>

          <td class="pimg"><img src="img/1.bmp"/></td>

          </tr>

          <tr>

          <td class="pname">product2</td>

          <td class="pimg"><img src="img/2.bmp"/></td>

          </tr>

          </tbody>

          </table>

          </body>

          </html>

          頁面中表格的商品信息是我們要爬取的數據。其中屬性pname類的商品名稱,以及屬于pimg類的商品圖片。

          2)使用HttpClient讀取HTML頁面

          HttpClient是一個處理Http協議數據的工具,使用它可以將HTML頁面作為輸入流讀進java程序中。可以從http://hc.apache.org/下載HttpClient的jar包。

          //獲得HttpClient對象

          HttpClient httpClient = new DefaultHttpClient();

          //定義要爬取數據的目標頁面url

          String url = "http://localhost:8080/MyShop/shop.jsp";

          //使用HttpGet對象綁定url

          HttpGet httpGet = new HttpGet(url);

          //訪問url獲得響應消息封裝在HttpResponse對象中

          HttpResponse httpResponse = httpClient.execute(httpGet);

          //entity中是響應消息的實體

          HttpEntity entity = httpResponse.getEntity();

          //使用EntityUtils的toString獲得url指定頁面的字符串內容,即html本身

          String html = EntityUtils.toString(entity);

          System.out.println(html);

          3)使用Jsoup解析html字符串

          通過引入Jsoup工具,直接調用parse方法來解析一個描述html頁面內容的字符串來獲得一個Document對象。該Document對象以操作DOM樹的方式來獲得html頁面上指定的內容。相關API可以參考Jsoup官方文檔:https://jsoup.org/cookbook/

          下面我們使用Jsoup來獲取上述html中指定的商品名稱和價格的信息。

          //JSOUP解析頁面數據,獲得Document對象

          Document doc = Jsoup.parse(html);

          //在Document對象的select方法中使用選擇器來獲得指定的元素,該選擇器與CSS及Jquery的選擇器相同。

          Elements eles = doc.select("table tbody tr .pname");

          Element ele = eles.get(0);

          //獲得指定元素的文本內容

          System.out.println(ele.text());

          Elements ele_imgs = doc.select("table tbody img");

          //獲得指定元素的src屬性的值

          String img_src = ele_imgs.get(0).attr("src");

          System.out.println(img_src);

          至此,我們已經實現使用HttpClient+Jsoup爬取HTML頁面數據的功能。接下來,我們讓效果更直觀一些,比如將爬取的數據存到數據庫中,將圖片存到服務器上。

          3.保存爬取的頁面數據

          1)保存普通數據到數據庫中

          將爬取的數據封裝進實體Bean中,并存到數據庫內。

          //將數據封裝到Javabean中

          Product p = new Product();

          p.setPid(UUID.randomUUID().toString());

          p.setPname(ele.text());

          p.setPimg(img_src);

          //將存入數據庫中

          ProductDao dao = new ProductDao();

          try {

          dao.addProduct(p);

          } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

          }

          //dao的操作

          public void addProduct(Product p) throws SQLException {

          QueryRunner qr = new QueryRunner(JDBCUtil.getDataSource());

          String sql = "insert into product values(?,?,?)";

          qr.update(sql,p.getPid(),p.getPname(),p.getPimg());

          }

          2)保存圖片到服務器上

          直接通過下載圖片的方式將圖片保存到服務器本地。

          private void downloadImg(HttpServletRequest request,Product p) throws ClientProtocolException, IOException {

          //獲得圖片的原url

          String url = "http://localhost:8080"+p.getPimg();

          //使用HttpClient獲得圖片資源

          HttpClient httpClient = new DefaultHttpClient();

          HttpGet httpGet = new HttpGet(url);

          HttpResponse httpResponse = httpClient.execute(httpGet);

          //獲得請求的圖片資源的輸入流

          InputStream is = httpResponse.getEntity().getContent();

          //在服務器本地創建文件,用于接收圖片

          String img_name = p.getPimg().substring(p.getPimg().lastIndexOf("/")+1);

          String realPath = request.getRealPath("/Download/"+img_name);

          File dir = new File(request.getRealPath("/Download"));

          if(!dir.exists()){

          //如果文件夾不存在,則創建

          dir.mkdirs();

          }

          //讀寫數據,保存圖片

          File file = new File(realPath);

          FileOutputStream fos = new FileOutputStream(file);

          int b = 0;

          while((b = is.read())!=-1){

          fos.write(b);

          }

          fos.close();

          }

          4.總結

          本案簡單實現了使用HttpClient+Jsoup爬取網絡數據,對于爬蟲技術本身,還有很多值得深挖的地方,以后再為大家講解。

          soup

          抓取網頁后,需要對網頁解析,可以使用字符串處理工具解析頁面,也可以使用正則表達式

          jsoup 的作用:是一款 Java 的HTML 解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于JQuery的操作方法來取出和操作數據

          jsoup的主要功能如下:

          1.從一個URL,文件或字符串中解析HTML;

          2.使用DOM或CSS選擇器來查找、取出數據;

          3.可操作HTML元素、屬性、文本;

          創建練習類

          解析URL

          第一個參數是訪問的url,第二個參數是訪問的超時時間

          使用標簽選擇器,獲取title標簽中的內容

          輸出結果

          讀取文件

          準備一個簡易的HTML文件

          獲取這個

          讀取文件,獲取字符串,代碼及結果

          使用dom方式遍歷文檔

          解析文件獲取document對象

          依據id獲取,這個是id的內容,我們獲取這個內容

          編寫代碼,顯示結果

          依據標簽獲取,我們獲取這個標簽的內容

          代碼及結果

          依據class獲取,獲取內容

          代碼和結果

          依據屬性,屬性內容

          代碼和結果

          接下來從元素中獲取數據

          首先從元素中獲取ID

          從元素中獲取className

          文本

          代碼及結果

          如果內容是兩個class

          那么代碼及結果

          從元素中獲取屬性

          代碼及結果

          獲取元素的所有屬性

          代碼及結果

          從元素中獲取文本內容,這個之前有,代碼和結果


          主站蜘蛛池模板: 韩国精品一区二区三区无码视频 | 一区二区三区中文| 欧洲精品码一区二区三区| 国产精品毛片VA一区二区三区 | 亚洲熟女www一区二区三区| 国产一区视频在线| 台湾无码AV一区二区三区| 日韩精品无码Av一区二区| 视频精品一区二区三区| 国产精品一区二区AV麻豆| 亚洲国产日韩在线一区| 无码人妻精品一区二区三区66| 精品视频一区二区三区在线观看| 国产综合一区二区在线观看| 综合久久一区二区三区 | 国产成人精品无人区一区| 国产嫖妓一区二区三区无码| 三级韩国一区久久二区综合 | 怡红院AV一区二区三区| 日韩视频一区二区在线观看| 精品乱码一区内射人妻无码| 一区二区三区在线看| 精品国产亚洲一区二区三区| 丰满爆乳一区二区三区| 3d动漫精品成人一区二区三| 好吊妞视频一区二区| 日韩精品一区二三区中文| 中文字幕日本精品一区二区三区| 久久免费精品一区二区| 日韩美一区二区三区| 国产爆乳无码一区二区麻豆| 中文字幕日韩丝袜一区| 国产精品自在拍一区二区不卡| 色噜噜狠狠一区二区三区果冻| 亚洲午夜精品一区二区麻豆| 国产av福利一区二区三巨| 农村乱人伦一区二区| 中文国产成人精品久久一区| 亚洲日韩一区二区三区| 黑人大战亚洲人精品一区| 国产激情一区二区三区小说|