基於jsoup的爬蟲

經過jsoup對 企查查 的公司信息爬取html

一、Jsoup

先介紹下Jsoup,它還有一個名稱「Beautifulsoup for Java」,對爬蟲知識感興趣的朋友通常都是從Python的爬蟲開始,那麼天然不會對Beautifulsoup感到陌生,而Jsoup就是java環境下一樣具備html文檔解析的最好的選擇之一。java

主要方法就是 Jsoup.parse(),解析出來的是一個Document對象。Element對象則提供了一系列相似於DOM的方法來查找元素,抽取並處理其中的元素。這邊仍是根據官方文檔的中文版將它們一一列舉,以便使用:python

查找元素git

getElementById(String id)github

getElementsByTag(String tag)瀏覽器

getElementsByClass(String className)app

getElementsByAttribute(String key) (and related methods)框架

Element siblings: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()dom

Graph: parent(), children(), child(int index)學習

元素數據

attr(String key)獲取屬性attr(String key, String value)設置屬性

attributes()獲取全部屬性

id(), className() and classNames()

text()獲取文本內容text(String value) 設置文本內容

html()獲取元素內HTMLhtml(String value)設置元素內的HTML內容

outerHtml()獲取元素外HTML內容

data()獲取數據內容(例如:script和style標籤)

tag() and tagName()

操做HTML和文本

append(String html), prepend(String html)

appendText(String text), prependText(String text)

appendElement(String tagName), prependElement(String tagName)

html(String value)

這給我大體的感受就像是html的讀寫,而爬蟲就是利用它的讀的功能。

二、爬蟲

通常來講,爬蟲都是模擬瀏覽器訪問的存在,可是有爬蟲也就有反爬蟲,尤爲是像企查查這樣以數據爲核心的相似網站,它所創建的反爬蟲機制是很是強的,這時,通常的爬蟲是難以獲取到想要獲得的全部數據的。以前我所寫過的一個爬蟲(詳見github)拿來做爲框架已經不合適了,我也想過再系統地去學python的爬蟲,爲何是python?由於它的第三方包多啊,也有相應的大型能夠定製的爬蟲框架。可是萬一仍是不行呢?而後就陷入了爬蟲與反爬蟲的攻防戰中,對,那樣應該是一個技術控要作的,但此時,更重要的是,減小時間成本與學習成本而得到大量優秀有效的數據以便後續的數據開發與分析。因此我選擇一個最無腦的方式……

你們玩過瀏覽器的都知道有個保存網頁的功能吧,嗯,咱們此次的爬蟲就是至關於解析本地文檔。這點固然受益於上一次爬蟲的開發,就很簡單的兩個功能,頁面請求與保存接着解析,寫好的爬蟲放在定時器中就能夠自動執行了。此次的從代碼方面看更簡單,就是一次頁面解析的過程,若是有N個公司的信息要得到,那麼就寫N個HashMap吧!

其實有了思路再加上Jsoup的方法那麼簡單使用,很快就能完成。

相關代碼就放在github上了。

三、我的使用經驗

其實有代碼有說明,照着弄只要時間長點基本都能弄出來。因此這裏要提供點精華了 ^_^

關於表格數據的抓取(解析)

對於表格,通常來講獲取表格數據時,都會寫一個循環,由於每一行的結構都是同樣的,而經過Tag的Name獲取時,會同時獲取表頭。

好比: <tr><th>身高</th></tr>

咱們要獲取的是「身高」屬性 這一列的值,而並不須要「身高」。

那麼咱們能夠直接結束整個循環的第一次。

操做方法就是:

boolean flag = true;

在循環里加入

 

if(flag) {
        flag = false;
       }else {
        ... //須要執行的語句
           }

 

這樣就能夠過濾掉表頭了。

上面的方法是用來解決水平結構的表格。

還有一種垂直結構的表格。

我本身的辦法是,由於這種表格的表頭都是有本身的標籤的,因此直接利用jsoup先把dom處理一次。

Document.getElementsByClass("#").remove();

 以後再獲取本身想要的信息吧~

相關文章
相關標籤/搜索