整合營銷服務商

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

          免費咨詢熱線:

          抓取網頁數據工具(java抓取網頁內容)

          這個信息爆炸的時代,我們每天都會接觸到大量的網絡數據。有時候我們需要獲取一些特定的數據來進行分析或者處理。作為一個程序員,我曾經親身體驗了使用JAVA編程語言來抓取網頁數據的過程。下面我將分享我在這個過程中遇到的挑戰和解決方案。

          一、背景概述

          首先,讓我們來了解一下什么是抓取網頁數據。簡單來說,抓取網頁數據就是通過編程的方式從互聯網上獲取網頁上的內容。這些內容可以是文本、圖片、鏈接等等。而JAVA是一種廣泛應用于開發各種類型應用程序的編程語言,也是我選擇用來實現網頁數據抓取的工具。

          二、選擇合適的工具

          在開始之前,我首先需要選擇一個合適的工具來輔助我完成任務。幸運的是,JAVA提供了許多強大的庫和框架,可以幫助我們輕松地實現網頁數據抓取功能。其中最常用和流行的工具就是Jsoup。Jsoup是一個開源的JAVA HTML解析器,可以方便地從HTML文檔中提取所需內容。

          三、分析目標網頁結構

          在開始編寫代碼之前,我需要先分析目標網頁的結構。這是因為不同的網頁結構可能需要使用不同的方法來獲取數據。通過查看目標網頁的源代碼,我可以了解到它的HTML結構和標簽使用情況。在分析過程中,我發現目標網頁中的數據都被包含在特定的HTML標簽中,這對我編寫代碼來提取數據非常有幫助。

          四、編寫JAVA代碼

          接下來,我開始編寫JAVA代碼來實現網頁數據抓取功能。首先,我需要導入Jsoup庫,并建立與目標網頁的連接。然后,通過選擇合適的HTML標簽和屬性,使用Jsoup提供的API來獲取所需數據。例如,如果我需要獲取所有標題為

          的文本內容,可以使用以下代碼:

          Document doc = Jsoup.connect("目標網址").get();
          Elements titles = doc.select("h1");
          for (Element title : titles){
              System.out.println(title.text());
          }
          

          通過以上代碼,我可以輕松地獲取到目標網頁中所有

          標簽內的文本內容,并將其打印輸出。

          五、處理異常情況

          在編寫代碼的過程中,我也遇到了一些異常情況。例如,有時候目標網頁會進行反爬蟲處理,限制訪問頻率或者要求登錄驗證。為了解決這些問題,我需要添加一些額外的代碼來模擬瀏覽器行為,例如設置User-Agent頭和處理Cookie等。此外,還需要注意異常處理,確保代碼的穩定性和健壯性。

          六、優化性能

          為了提高網頁數據抓取的效率和性能,我還進行了一些優化工作。首先,我使用多線程技術來并發地抓取多個網頁,以減少等待時間。其次,我使用連接池來管理與目標網頁的連接,避免頻繁地創建和銷毀連接。最后,我對代碼進行了適當的優化和緩存處理,以減少不必要的資源消耗。

          七、總結與展望

          通過使用JAVA抓取網頁數據的親身體驗,我深刻理解到了編程技術在信息獲取和處理中的重要性。通過合理選擇工具、分析網頁結構、編寫代碼、處理異常情況和優化性能,我們可以輕松地實現網頁數據抓取功能,并為后續的數據分析和應用提供強有力的支持。未來,我將繼續探索更多關于JAVA抓取網頁數據的技巧和方法,并將其應用到實際項目中。

          以上就是我親身體驗使用JAVA抓取網頁數據的故事。希望這篇文章能夠對想要學習或者應用這方面技術的讀者有所幫助。編程的世界充滿了無限的可能性,讓我們一起努力,不斷探索和創新!

          DaemonSet和Sidecar模式各有優缺點,目前沒有哪種方式可以適用于所有場景。因此我們阿里云日志服務同時支持了DaemonSet以及Sidecar兩種方式,并對每種方式進行了一些額外的改進,更加適用于K8S下的動態場景。

          Kubernetes(K8S)作為CNCF(cloud native computing foundation)的一個核心項目,背靠Google和Redhat的強大社區,近兩年發展十分迅速,在成為容器編排領域中領導者的同時,也正在朝著PAAS底座標配的方向發展。

          日志采集方式

          日志作為任一系統不可或缺的部分,在K8S的官方文檔中也介紹了多種的日志采集形式,總結起來主要有下述3種:原生方式、DaemonSet方式和Sidecar方式。

          1. 原生方式:使用 kubectl logs 直接在查看本地保留的日志,或者通過docker engine的 log driver 把日志重定向到文件、syslog、fluentd等系統中。
          2. DaemonSet方式:在K8S的每個node上部署日志agent,由agent采集所有容器的日志到服務端。
          3. Sidecar方式:一個POD中運行一個sidecar的日志agent容器,用于采集該POD主容器產生的日志。

          采集方式對比

          每種采集方式都有一定的優劣勢,這里我們進行簡單的對比:

          從上述表格中可以看出:

          1. 原生方式相對功能太弱,一般不建議在生產系統中使用,否則問題調查、數據統計等工作很難完成;
          2. DaemonSet方式在每個節點只允許一個日志agent,相對資源占用要小很多,但擴展性、租戶隔離性受限,比較適用于功能單一或業務不是很多的集群;
          3. Sidecar方式為每個POD單獨部署日志agent,相對資源占用較多,但靈活性以及多租戶隔離性較強,建議大型的K8S集群或作為PAAS平臺為多個業務方服務的集群使用該方式。

          日志服務K8S采集方式

          DaemonSet和Sidecar模式各有優缺點,目前沒有哪種方式可以適用于所有場景。因此我們阿里云日志服務同時支持了DaemonSet以及Sidecar兩種方式,并對每種方式進行了一些額外的改進,更加適用于K8S下的動態場景。

          這兩種模式均基于Logtail實現,日志服務客戶端Logtail目前已有百萬級部署,每天采集上萬應用、數PB的數據,歷經多次雙11、雙12考驗。相關技術分享可以參見文章:多租戶隔離技術+雙十一實戰效果,Polling + Inotify 組合下的日志保序采集方案。

          DaemonSet采集方式

          DaemonSet方式下Logtail做了非常多的適配工作,包括:

          • 一條命令一個參數即可實現部署,資源自動初始化
          • 支持CRD方式配置,支持K8S控制臺、kubectl、kube api等,與K8S發布、部署無縫集成
          • K8S RBAC鑒權,日志服務STS鑒權管理

          詳細的介紹文章可以參考:

          再次升級!阿里云Kubernetes日志解決方案

          LC3視角:Kubernetes下日志采集、存儲與處理技術實踐

          Sidecar采集方式

          sidecar方式的配置以及使用相對在虛擬機/物理機上采集數據區別不大,從Logtail容器視角來看:Logtail工作在一個“虛擬機”上,需要采集這個機器上某個/某些日志文件。

          但在容器場景下還需解決兩個問題:

          1. 配置:使用編排的方式配置agent容器
          2. 動態性:需適應POD的IP地址和hostname的變化
          3. 目前Logtail的容器支持通過環境變量配置相關參數,并支持自定義標識的機器組進行工作,可以完美解決上述兩個問題。

          Sidecar配置示例

          Sidecar模式下日志組件安裝、配置方式如下:

          步驟一: 部署Logtail容器

          1. 在部署POD時將日志路徑掛載到本地,并將對應的volume也掛載到Logtail容器。
          2. Logtail容器需配置 ALIYUN_LOGTAIL_USER_ID 、 ALIYUN_LOGTAIL_CONFIG 、 ALIYUN_LOGTAIL_USER_DEFINED_ID ,參數含義以及值的選取參見:標準Docker日志采集。

          tips:

          1. Logtail容器建議配置健康檢查,在運行環境、內核等出現異常時可自動恢復。
          2. 示例中使用的Logtail鏡像訪問的是阿里云hangzhou公網鏡像倉庫,您可根據需求替換成本Region的鏡像,并使用內網方式。
          apiVersion: batch/v1
          kind: Job
          metadata:
           name: nginx-log-sidecar-demo
           namespace: kube-system
          spec:
           template:
           metadata:
           name: nginx-log-sidecar-demo
           spec:
           # volumes配置
           volumes:
           - name: nginx-log
           emptyDir: {}
           containers:
           # 主容器配置
           - name: nginx-log-demo
           image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
           command: ["/bin/mock_log"]
           args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
           volumeMounts:
           - name: nginx-log
           mountPath: /var/log/ngin
           # Logtail的Sidecar容器配置
           - name: logtail
           image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
           env:
           # aliuid
           - name: "ALIYUN_LOGTAIL_USER_ID"
           value: "165421******3050"
           # 自定義標識機器組配置
           - name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
           value: "nginx-log-sidecar"
           # 啟動配置(用于選擇Logtail所在Region)
           - name: "ALIYUN_LOGTAIL_CONFIG"
           value: "/etc/ilogtail/conf/cn-hangzhou/ilogtail_config.json"
           # 和主容器共享volume
           volumeMounts:
           - name: nginx-log
           mountPath: /var/log/nginx
           # 健康檢查
           livenessProbe:
           exec:
           command:
           - /etc/init.d/ilogtaild
           - status
           initialDelaySeconds: 30
           periodSeconds: 30 
           
          

          步驟二: 配置機器組

          如下圖所示,在日志服務控制臺創建一個Logtail的機器組,機器組選擇自定義標識,可以動態適應POD ip地址的改變。具體操作步驟如下:

          1. 開通日志服務并創建Project、Logstore,詳細步驟請參考準備流程。
          2. 在日志服務控制臺的機器組列表頁面單擊創建機器組。
          3. 選擇用戶自定義標識,將您上一步配置的 ALIYUN_LOGTAIL_USER_DEFINED_ID填入用戶自定義標識內容框中。

          步驟三:配置采集方式

          機器組創建完成后,即可配置對應文件的采集配置,目前支持極簡、Nginx訪問日志、分隔符日志、JSON日志、正則日志等格式,具體可參考:文本日志配置方式。本示例中配置如下:

          步驟四:查詢日志

          采集配置完成并應用到機器組后,1分鐘內日志即可采集上來,進入對應logstore的查詢頁面即可查詢到采集上來的日志。

          日志進階

          阿里云日志服務針對日志提供了完整的解決方案,日志采集只是其中的第一步,以下相關功能是日志進階的必備良藥:

          1. 日志上下文查詢:https://help.aliyun.com/document_detail/48148.html
          2. 快速查詢:https://help.aliyun.com/document_detail/88985.html
          3. 實時分析:https://help.aliyun.com/document_detail/53608.html
          4. 快速分析:https://help.aliyun.com/document_detail/66275.html
          5. 基于日志設置告警:https://help.aliyun.com/document_detail/48162.html
          6. 配置大盤:https://help.aliyun.com/document_detail/69313.html
          7. 更多日志進階內容可以參考:日志服務學習路徑。

          作者:元乙

          近在網上閱讀的時候發現一種新型的內容防采集JavaScript代碼。大體情況是:如果網站監測到批量采集工具(爬蟲)的行為,例如訪問頻次太高,就會在內容中插入一端提示信息,并隱藏后續的正文,但是點擊解除提示就可以消除提示并顯示正文,因此這對于正常的頁面瀏覽是沒有實質影響的,但是對采集工具(爬蟲)來說,就會出現內容截斷,導致采集內容不完整。下面是正常的樣子:

          下面是網站發現異常的情況,部分正文被截斷,但是Web瀏覽時,點擊藍色文字,原本被屏蔽的問題就會出現。如果是爬蟲采集,就沒有辦法了,會丟失被截斷的文字


          看了一下網頁,其實就是一段不復雜的Javascript代碼和內容改寫:

          內容改寫

          <div id=”content”><p>……..慕容還想穩住下盤,張尋寧已經到了,左右開弓幾記直拳打到慕容臉上。</p><p>慕容晃了晃差點沒摔倒,此時時間只過了5秒。慌亂間,他揮動斧頭出擊,卻再次走空。張尋寧閃身后躍起,膝蓋撞到他肚子。慕容再次踉蹌后退幾步。張尋寧絕不給對手喘息的機會,猛然逼近,這次是一個下勾拳,打中他的下巴。眼看著一幅假牙從口中飛出。</p><p>“看起來人設還是很還原?來吧,讓我看看你的落櫻神斧。”</p><p>他奮力用手肘猛擊慕容,到目前為止慕容完全沒有還手之力。</p><div id=”c1″><a onClick=”getDecode();” style=”color:#ff6600;”>防采集,自動加載失敗,點擊手動加載,不支持閱讀模式!</a><p>禁止轉碼、禁止閱讀模式,下面內容隱藏,請退出閱讀模式!</p></div></div>

          網頁最后的JS代碼(應該是生成器產生的):

          <script type=”text/javascript”>

          init(‘chapter’);

          function getDecode(){H=~[];H={___:++H,$$$$:(![]+””)[H],__$:++H,$_$_:(![]+””)[H],_$_:++H,$_$$:({}+””)[H],$$_$:(H[H]+””)[H],_$$:++H,$$$_:(!””+””)[H],$__:++H,$_$:++H,$$__:({}+””)[H],$$_:++H,$$$:++H,$___:++H,$__$:++H};H.$_=(-----略去----+H.$$$+H._$$+”\””)())();$(‘#c1’).remove();}

          </script>

          <script>universally();</script>

          由于飛機上沒網絡,沒法檢查網頁中某外部JS文件中init(’chapter’)的內容,但是幾乎可以肯定是用來判斷是否有異常采集行為,從而給出提示并屏蔽內容。

          • 網站在這里:https://www.zhaishuyuan.com/read/37560

          相關信息:

          1. 如何判斷自己的網頁被保存到本地,然后果斷跳轉呢?(腳本)http://www.brofive.org/?p=6146

          主站蜘蛛池模板: 人妻夜夜爽天天爽一区| 交换国产精品视频一区| 国产在线视频一区| av在线亚洲欧洲日产一区二区| 精品国产一区二区三区色欲| 国产Av一区二区精品久久| 欧洲精品码一区二区三区| www一区二区三区| 中文字幕精品无码一区二区三区| 国产午夜精品免费一区二区三区 | 爆乳熟妇一区二区三区| 亚洲国产成人一区二区精品区| 精品欧洲AV无码一区二区男男| 日韩美一区二区三区| 手机看片福利一区二区三区| 日韩人妻一区二区三区蜜桃视频| 亚洲AV噜噜一区二区三区| 亚洲日本一区二区一本一道| 亚洲av福利无码无一区二区| 怡红院一区二区三区| 日本高清不卡一区| 在线成人综合色一区| 日韩精品一区二区三区四区| 人妻av综合天堂一区| 亚洲一区二区三区无码中文字幕| 亚洲乱码一区二区三区国产精品| 男人免费视频一区二区在线观看| 无码精品一区二区三区免费视频| 成人H动漫精品一区二区| 国产免费无码一区二区| 无码喷水一区二区浪潮AV| 成人免费区一区二区三区| 无码人妻精品一区二区三区不卡| 国产一区二区精品久久凹凸| 午夜福利无码一区二区| 好看的电影网站亚洲一区 | 国产亚洲综合精品一区二区三区| 亚洲AV无码第一区二区三区| 国产一区二区三区在线看片| 色狠狠一区二区三区香蕉| 亚洲日本久久一区二区va|