javascript
JSOUP爬虫常见问题解决方法
? ? ?首先我們必需明確一點的是,自己想要對那些網站進行爬取相關信息,其次就是你要爬取的東西,你要什么?接下來就是怎么去爬取,采用的方式手段是什么?頁面中是否存在反爬蟲技術,如何去解決?
?
(備注:以下部分說法是建立在下載HTML頁面,css樣式,js文件,各類圖片中操作的)
?
一、jsoup + java技術爬蟲
? ?充分利用Jsoup 工具,進行頁面的解析,獲取,以及修改原頁面的東西,達成你想要的的效果。jsoup 是一種解析HTML頁面轉成doc,一個樹狀形式的數據結構,功能非常強大。
? jsoup 中會有正則表達式,通過正則表達式,利用Pattern 、Matcher ,可以獲取特定的字段替換自己不要的東西
?
二、jsoup 獲取HTML常用的屬性方法有:
? ? ? ?a.獲取id的屬性的值,由于id屬性唯一,所以屬性element 是單數。getELementById("idName").text(),獲得的是String類型數據;?
?
? ? ? b.獲取class的屬性值,class屬性為多個元素值,所以是一個復數概念,然后doc中存在這個getindex方法,獲取第幾個元素,同時亦可以用text()方法,或者是tostring方法,直接輸出;
?
? ? ? c.獲取tag標簽的屬性值,tag標簽也是一個多數的概念,所以呢,是一個ELements 存儲的對象的,要精準的定位在哪個地方需要自己多看一下頁面的結構方式是怎么樣的,獲得標簽之后,你可以對它進行操作,比如添加樣式,添加節點,刪除屬性值,刪除不必要的東西................比較多的東西
?
? ? ? d.獲取方式getXX方式,也可以使用Select,具體的可以參看jsoup開發文檔。
三、今天的重點
? ? ? ? ? ? ? 1.數據就存在標簽中(最簡單)如何獲取?
? ?? ? ? ? ? ? ? 解決辦法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???通過標簽和屬性class 名稱,id名稱直接綁定獲取值,比較簡單。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?實例:比如存在一個<div class="myclass">我是div實例<div>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?String value??= doc.getElementByClass("myclass").text();(備注:)
? ? ? ? ? ? ? 2.數據信息存在<script>標簽中如何獲取?
? ? ? ? ? ? ? ?解決方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 通過document.getElementByTag("name").text();方法,同時轉成文本類型去針對性的分析,獲取你要img類型,title標題,文本信息等等,可以寫正則表達式,匹配你想要的數據保存下來
? ? ? ? ? ? ? 3.數據信息存在js?文件中如何獲取?
? ? ? ? ? ? ? ??解決方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 先讀取文件,正則表達式匹配想要的內容,修改替換,最后保存文件并寫入(個人極其不推薦使用)
? ? ? ? ? ? ? 4.數據信息存在跨域怎么辦?
? ? ? ? ? ? ???信息的跨域問題,多數在js 文件中體現,加載的時候會訪問別的網上,顯然不是我們想要的東西。
? ? ? ? ? ? ? ?解決方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?找到跨域地址,自己下載下來存放在本地。但是多個數據中都有跨域的問題,則這種方式的采用不是可取的。我們就可以采用我們的一個強大的HTMLUnit這個東西。
?
?
?
(備注:htmlunit工具可以解決跨域的問題,也可以解決js 文件數據的問題,還可以解決動態數據加載的問題,因為它都是加載數據渲染到頁面去的,標簽上你能看到的東西都是加載后的,可以被獲取。本人親測可用)
總結
以上是生活随笔為你收集整理的JSOUP爬虫常见问题解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: prototype与_proto_
- 下一篇: java jsonp网络爬虫_JSOUP