整合營銷服務商

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

          免費咨詢熱線:

          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

          那么代碼及結果

          從元素中獲取屬性

          代碼及結果

          獲取元素的所有屬性

          代碼及結果

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


          主站蜘蛛池模板: 久夜色精品国产一区二区三区| 亚洲中文字幕无码一区 | 波多野结衣中文一区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产精品免费视频一区| 亚洲一区二区三区高清在线观看| 国产精品日本一区二区在线播放| 少妇激情AV一区二区三区| 爱爱帝国亚洲一区二区三区| 国产色精品vr一区区三区| 亚洲V无码一区二区三区四区观看| 精品国产一区二区三区香蕉| 日本一区视频在线播放| 精品一区二区三区无码免费视频| 糖心vlog精品一区二区三区 | av在线亚洲欧洲日产一区二区| 日韩欧国产精品一区综合无码| 国产福利无码一区在线| 国产伦理一区二区| 国产激情无码一区二区三区| 精品一区精品二区制服 | 国产精品毛片一区二区| 日本一区二区视频| 午夜天堂一区人妻| 99久久国产精品免费一区二区| 动漫精品一区二区三区3d| 精品深夜AV无码一区二区| 亚洲中文字幕无码一区| 久久精品国产一区二区三区不卡| 国产剧情一区二区| 国产日韩精品一区二区在线观看 | 在线精品动漫一区二区无广告| 精品人妻少妇一区二区三区在线| 国产成人欧美一区二区三区| 香蕉久久一区二区不卡无毒影院 | 国产a∨精品一区二区三区不卡| 国产AⅤ精品一区二区三区久久| 色精品一区二区三区| 国产91精品一区二区麻豆网站 | 亚洲福利电影一区二区?| 人妻无码第一区二区三区|