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