整合營銷服務商

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

          免費咨詢熱線:

          JAVA網絡編程模擬瀏覽器獲取html源代碼(網絡爬

          JAVA網絡編程模擬瀏覽器獲取html源代碼(網絡爬蟲)

          絡爬蟲基本思路

          基本思路:由關鍵字指定的url把所有相關的html頁面全抓下來(html即為字符串),然后解析html文本(通常是正則表達式或者現成工具包如jsoup),提取文本信息,然后把文本信息存儲起來。

          網絡爬蟲操作步驟

          URL(統一資源定位符)

          下載資源

          分析下載資源(正則表達式)

          抽取、清洗、儲存

          該文章只會操作兩步步驟URL和下載html資源。

          網絡編程小知識

          URI:(Universal Resource Identifier)統一資源標記符,用來標記抽象或物理資源的一個緊湊字符串。

          URL:(Universal Resource Locator)統一資源定位符,一種定位資源的主要訪問機制的字符串,一個標準的URL必須包括:protocal(協議)、host(主機)、port(端口號)、path(路徑)、parameter(參數)、anchor(錨)。

          URN:(Universal Resource Name)統一資源名稱,通過特定命名空間中的唯一名稱或ID來標識資源。

          URL和URN都是URI,但是URI不一定是URL或者URN。

          SEO搜索引擎優化

          SEO是搜索引擎優化(Search Engine Optimization)的英文縮寫,中文譯為“搜索引擎優化”。在了解搜索引擎自然排名機制的基礎上,對網站進行內部及外部的調整優化,改進網站在搜索引擎中的關鍵詞自然排名,獲得更多流量,從而達成網站銷售及品牌建設的預期目標。

          網絡爬蟲技術是SEO搜索引擎優化的基礎(對網絡爬蟲感興趣的同學可以深入研究)

          JAVA中的JDK已經對URL(資源定位符)封裝完畢,使用者只要會用即可。

          使用JAVA代碼下載網站資源有如下兩種情況:


          該代碼主要是通過URL類的openStream方法來獲取網絡資源,如果還想了解URL類的信息的同學可以去看看JDK中URL類的源代碼。

          二、網站不允許外來訪問(模仿瀏覽器使用HTTP協議交流)代碼如下


          注意事項

          JAVA中的控制臺儲存空間有限,所以有時候HTML源代碼會顯示不全,但你可以通過IO操作來拷貝到文件中去。

          HttpURLConnection類的setRequestProperty方法中的(String key,String value)參數需要到瀏覽器相應網頁中去拷貝。

          拷貝如下:

          1、進入瀏覽器相關網頁。

          2、按住F12進入devtools。

          3、拷貝Request包中最后一行數據。

          4、冒號前的對應key參數,冒號后的對應value參數。

          點擊關注私信小編“資源”即可獲得

          近在工作中遇到一個bug,將word轉換成html,轉換成功之后在瀏覽器中打開其中圖片不顯示,使用img標簽,src指定圖片相對地址又是能顯示的,排除圖片問題。

          網上能搜索到的demo

          打開轉碼之后的html代碼發現,生成的是vml圖片標簽,這個在IE9以后就不支持了,更別說現在的主流瀏覽器了。

          生成的html中使用的是vml標簽

          將這個跟大佬分析分析,各種文檔一查,咔咔咔大致分析出問題所在。原來jacob使用的是word本身自帶的功能,相當于把word打開另存為html,于是手動將word轉為html試了一下,果然效果與代碼轉換一致,這時候注意到word另存為時有一個web選項,里面有個使用vml渲染圖片默認是選中的,去掉這個選項,再次生成,圖片正常顯示。



          到這里基本已經確定了問題的解決思路,另存為時不勾選這個選項,那么問題來了,怎么利用jacob操作另存為時去掉這個選項呢,想去搜搜看jacob相關的文檔,結果不知道是不是因為這個很老了,網上大多數都是demo,根本沒有相關的文檔可看,Github上也是只言片語,根本無從查起。

          jacob github 地址:https://github.com/joval/jacob

          微軟官網文檔

          官方文檔連接:https://docs.microsoft.com/zh-cn/office/vba/api/word.weboptions.relyonvml

          微軟官網查詢相關文檔,發現其實是可以關閉的,于是代碼變成這樣

          關閉relyOnVml

          再次運行程序,這次轉出來的html就能在瀏覽器打開了。

          總結,在這次解決問題的過程中,學會了往更深層次去想問題,找對方向,迎難而上。

          記錄一下這個問題解決的經驗,也希望能幫到同樣遇到這個問題的人。

          .Jsoup介紹

            - 官網文檔:https://jsoup.org

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

            2. Jsoup快速入門

            - 獲取網頁標題

            String url="https://search.jd.com/Search?keyword=手機&wq=手機&page=1";
            Document document=Jsoup.connect(url).get();
            String title=document.select("title").text();
            System.out.println(title);
            ```

            - 運行效果:手機 - 商品搜索 - 京東

            3. 網站數據分析

            3.1 分析網站的訪問地址

            - 以京東商城為例,商品分頁列表的url地址,需要帶如下幾個參數,因此,在發送http請求時,需要攜帶正確的參數。

            - URL:https://search.jd.com/Search?keyword=手機&wq=手機&page=1

            3.2 分析網站的頁面結構

            - 通過瀏覽器的開發者工具,可以分析出頁面中我們需要的html結構。

          <img src="assets/image-20220717171103097.png" alt="image-20220717171103097" style="zoom:67%;" />

          - 可以看出,我們需要的商品數據,封裝在一個id=J_goodsList的div標簽中,我們可以方便的通過DOM解析出這塊數據。

            4. 實戰實現過程

            - 獲取第1頁的商品基本數據

          public static void main(String[] args) throws Exception {
              //第1頁地址
              String url="https://search.jd.com/Search?keyword=手機&wq=手機&page=1";
              //發送http請求
              Document document=Jsoup.connect(url).get();
              //在id=J_goodsList的div下,獲取所有帶有data-sku屬性的li標簽
              Elements lis=document.select("div[id=J_goodsList] li[data-sku]");
              lis.forEach(
                      li -> {
                          //獲取商品sku
                          String sku=li.attr("data-sku");
                          //獲取商品name
                          String name=li.select("div[class='p-name p-name-type-2'] a em").text();
                          //獲取商品圖片地址
                          String img=li.select("div[class=p-img] a img[data-lazy-img]").attr("data-lazy-img");
                         
                          System.out.println(String.format("%s, %s, %s", sku, name, img));
                      }
              );
          }

            - 效果預覽

            - 改造為分頁獲取


          主站蜘蛛池模板: 国产一区二区三区在线2021| 国产福利精品一区二区| 国产视频一区二区| 中文字幕一区二区三区久久网站 | 91久久精品午夜一区二区| 亚洲AV乱码一区二区三区林ゆな| 天堂国产一区二区三区| 国产精品一区二区av| 水蜜桃av无码一区二区| 无码欧精品亚洲日韩一区| 国产成人综合一区精品| 国产精品一区二区三区高清在线| 无码AV动漫精品一区二区免费| 97精品国产福利一区二区三区| 久久青草精品一区二区三区| 精品人妻无码一区二区色欲产成人| 国产伦精品一区二区三区四区 | 玩弄放荡人妻一区二区三区| 91麻豆精品国产自产在线观看一区| 亚洲一区二区三区高清视频| 亚洲日韩国产一区二区三区在线 | 国产婷婷色一区二区三区| 午夜影院一区二区| 日韩内射美女人妻一区二区三区| 日韩免费一区二区三区| 亚洲美女视频一区二区三区| 久久久久人妻一区精品| 伊人激情AV一区二区三区| 波多野结衣高清一区二区三区| 久久精品一区二区影院| 中文字幕日韩人妻不卡一区| 亚洲综合av永久无码精品一区二区 | 亚洲日本一区二区三区在线不卡| 国产成人一区二区三区免费视频| 在线观看国产一区亚洲bd| 后入内射国产一区二区| 2014AV天堂无码一区| 亚洲一区二区三区日本久久九| 亚洲区精品久久一区二区三区| 欧美日韩精品一区二区在线观看| 韩国女主播一区二区|