爬虫的智能化解析之使用Diffbot自动解析页面
?????什么是爬蟲的智能化解析呢?顧名思義就是自動解析頁面,不在慢慢一個網站一個網站的寫解析規則,我們可以利用一些算法來計算出來頁面上的特定元素的位置和樣式。
?????前面我做過一個爬取小說網站的爬蟲,平常我寫的爬蟲的話,要根據不同的網站,編寫不同的提取規則,才能提取出想要的內容。而如果使用智能化解析的話,不論是那個網站,你只需要把網頁的url傳遞給他,就可以通過算法智能識別出標題,內容,更新時間等信息,而不需要重復編寫提取規則。
?????這方面的算法服務的話,diffbot應該算是目前做的最好的了,這家公司一直致力于頁面解析,解析的準確度也很高。但可惜的是他們的算法并不開源,所以我們只能使用他們公司的服務。
這些理論都可以百度,我還是直接上一個示例吧。
注冊賬號
首先我們使用Diffbot的服務的話要先注冊一個賬號,它有15天的免費使用期。
Diffbot官網
在如圖所示位置,需要填寫你的郵箱,注冊后它會向郵箱中發送一個token,每次調用Diffbot的服務的時候都需要這個服務憑證。點擊后面的按鈕后會跳到這個頁面
在這里只需要根據要求把它帶*號的內容填寫完整就行了,然后點擊下面藍色的按鈕,它會有一個機器人驗證(貌似要搭梯子打開才會出現驗證),驗證通過了再點一次就注冊成功了。
登錄上之后先來嘗試一下它的測試功能吧。
測試頁面
打開測試頁面:https://www.diffbot.com/dev/home/
例如我抓取一個小說頁面,得到的結果是這樣:
看到沒有,小說章節的標題,和內容都解析出來了。而在這過程中,我并沒有寫任何的解析代碼。
Diffbot API
剛剛在網頁上的解析只是提供給你測試用的,那么我們在python代碼中應該怎樣使用呢?看下面代碼:
import requests, json # api調用地址 url = 'https://api.diffbot.com/v3/article'# 傳遞的參數 params = {'token': '8173ecdcb07374d33e34ab803a06719d', # Developer Token,注冊成功后會發送到你的郵箱'url': 'https://www.booktxt.com/0_24/107339.html', # 爬取的目標網頁的url'fields': 'meta' # 可選參數,制定返回的字段 } # 使用get方式請求,返回解析后的內容 response = requests.get(url, params=params) # 打印解析出來的內容 print(response.json())返回的結果:
{'request': {'pageUrl': 'https://www.booktxt.com/0_24/107339.html','api': 'article','fields': 'meta','version': 3},'objects': [{'breadcrumb': [{'link': 'https://www.booktxt.com/','name': '頂點小說'},{'link': 'https://www.booktxt.com/xuanhuan/', 'name': '玄幻小說'},{'link': 'https://www.booktxt.com/0_24/', 'name': '圣墟'}],'humanLanguage': 'zh','meta': {'description': '頂點小說提供圣墟(辰東)第一章 沙漠中的彼岸花在線閱讀,所有小說均免費閱讀,努力打造最干凈的閱讀環境,24小時不間斷更新,請大家告訴更多的小說迷。','keywords': '第一章 沙漠中的彼岸花,辰東,圣墟','title': '圣墟_辰東_第一章 沙漠中的彼岸花 - 頂點小說'},'diffbotUri': 'article|3|-982846652','siteName': 'booktxt.com','pageUrl': 'https://www.booktxt.com/0_24/107339.html','html': '<p>大漠孤煙直,長河落日圓。</p>\n<p>一望無垠的大漠,空曠而高遠,壯闊而雄渾,當紅日西墜,地平線盡頭一片殷紅,磅礴中亦有種蒼涼感。</p>\n<p>上古的烽煙早已在歲月中逝去,黃河古道雖然幾經變遷,但依舊在。</p>\n<p>楚風一個人在旅行,很疲憊,他躺在黃沙上,看著血色的夕陽,不知道還要多久才能離開這片大漠。</p>\n<p>數日前他畢業了,同時也跟校園中的女神說再見,或許見不到了吧,畢竟他曾被委婉的告知,從此天各一方,該分手了。</p>\n<p>離開學院后,他便出來旅行。</p>\n<p>落日很紅,掛在大漠的盡頭,在空曠中有一種寧靜的美。</p>\n<p>楚風坐起來喝了一些水,感覺精力恢復了不少,他的身體屬于修長強健那一類型,體質非常好,疲憊漸消退。</p>\n<p>站起來眺望,他覺得快要離開大漠了,再走一段路程或許就會見到牧民的帳篷,他決定繼續前行。</p>\n<p>一路西進,他在大漠中留下一串很長、很遠的腳印。</p>\n<p>無聲無息,竟起霧了,這在沙漠中非常罕見。</p>\n<p>楚風驚訝,而這霧竟然是藍色的,在這深秋季節給人一種涼意。</p>\n<p>不知不覺間,霧靄漸重,藍色繚繞,朦朦朧朧,籠罩了這片沙漠。</p>\n<p>大漠盡頭,落日都顯得有些詭異了,漸漸化成一輪藍日,有種魔性的美,而火云也被染成了藍色。</p>\n<p>楚風皺眉,雖然他知道,沙漠的天氣最是多變,但眼前實在不太正常。</p>\n<p>一片寂靜,他停下腳步。</p>\n<p>在進大漠前,他曾聽當地的老牧民講過,一個人走在沙漠中,有時會聽到一些古怪的聲音,會見到一些奇異的東西,要格外謹慎。</p>\n<p>當時他并未在意。</p>\n<p>依舊寧靜,沙漠中除卻多了一層朦朧的藍霧,并沒有其他變故發生,楚風加快腳步,他想盡快離開這里。</p>\n<p>大漠的盡頭,落日藍的妖異,染藍了西部的天空,不過它終究快要消失在地平線上了。</p>\n<p>楚風的速度越來越快,開始奔跑,他不想呆在這種詭異、充滿不確定性的地方。</p>\n<p>在沙漠中,海市蜃樓那樣的奇景多發生在烈日當空下,眼下不相符,這不像是什么蜃景。</p>\n<p>突然,前面傳來輕響,像是有什么東西破沙而出,而且聲音很密集,此起彼伏。</p>\n<p>楚風倏地停下腳步,盯著沙漠,前方地面藍光星星點點,像是散落一地藍鉆,晶瑩透亮,在落日的余暉中閃耀著。</p>\n<p>那是一棵又一棵嫩苗,不足一寸高,自沙漠中破土而出,帶著美麗的光澤,剔透而妖異,遍地皆是。</p>\n<p>短暫的停滯,隨后沙沙聲成片,藍色燦燦,所有嫩苗都快速拔高,一瞬間生長起來。</p>\n<p>天邊,藍日下沉,即將消失,霧氣彌漫,浩瀚的大漠如同披上了一層詭異的藍色薄紗。</p>\n<p>“啵!”</p>\n<p>花朵綻放的聲音傳出,沙漠中一片湛藍,在夕陽即將消失的剎那,這些植物開始綻放出成片的花朵。</p>\n<p>大量的藍花,晶瑩點點,猶若夢幻,有些醉人,遍開在沙漠中,非常不真實。</p>\n<p>這種植物一尺多高,通體如藍珊瑚般透亮,花瓣一條條,妖艷而迷人,宛若盛放在另一片國度,帶著魔性,吸引人的心神。</p>\n<p>楚風退后一步,然而,身后也已滿是這種植物,藍光流動,一眼望不到邊。</p>\n<p>他很吃驚,仔細的看著,努力辨認,這像極了彼岸花,一條條花瓣展開,又向后彎曲,極其美麗。</p>\n<p>不過,彼岸花紅的鮮艷,而它卻是藍色的,從未聽聞有藍色彼岸花。</p>\n<p>彼岸花真實存在,帶著濃烈的宗教色彩,關于它有太多的傳說,但楚風不信這些,只為眼前的景象而驚。</p>\n<p>沙漠干燥、缺水,只有極其稀少的耐旱植物偶爾可見,零星散落著。而彼岸花喜歡陰森、潮濕的環境,無論如何也不該在這里出現,還如此的妖艷。</p>\n<p>這里遍地都是,一眼望不到盡頭。</p>\n<p>大漠浩瀚,薄霧染藍了落日,浸透了天邊,而整片空曠無垠的沙漠都生出藍色的彼岸花,說不出的奇異、神秘!</p>\n<p>一縷淡淡的芬芳飄漾,讓人沉迷。</p>\n<p>楚風用力搖頭,小心的邁步,避開這些花,他發現只有一個地帶沒有這種植物,那就是———黃河古道。</p>\n<p>在歲月中多次變遷,幾經改道,它貫穿這片大漠,如今已近干涸,藍色彼岸花開遍兩岸,擁簇著它。</p>\n<p>花開兩岸,彼此遙見。</p>\n<p>終于,太陽沉下去了,而也正是在此時,這些植物盛放,花開到極致,化作藍色的海洋,流光溢彩。</p>\n<p>雖然暮色降臨,但這里藍色光澤繚繞,極致炫目,艷麗的出奇。</p>\n<p>楚風站在黃河古道上,心中無法寧靜,但是他卻不作停留,沿河道快速前進。</p>\n<p>天色漸暗,最后的落日余暉也已不見了。</p>\n<p>藍色的大漠光彩點點,而后突然間,砰然一聲,所有藍色彼岸花怒放后,竟然在一瞬間同時凋零。</p>\n<p>妖艷的花瓣枯萎,接著整株的植物開始干枯,它們失去色彩,耗盡生機,迅速發黃,而后碎裂,像是在一瞬間失去了數十年。</p>\n<p>“砰!”</p>\n<p>最后的剎那,遍地干枯的藍色彼岸花寸寸斷裂,化成了粉末。</p>\n<p>這詭異的景象,很難解釋。</p>\n<p>它們如同煙花般,短暫的絢爛,美麗到極致,而后便凋零,成為灰燼。</p>\n<p>枯黃的粉末落在沙地間,在暮色中很難辨出,而此時藍霧也早已消失,大漠恢復了原樣,像是什么都不曾發生過,再次寧靜。</p>\n<p>楚風沒有駐足,大步前行,在暮色中,他翻過許多座沙丘,終于見到了地平線上的山影,要離開大漠了。</p>\n<p>天色漸黑,他終于走出來了,清晰的看到了山地,也隱約間看到了山腳下牧民的帳篷。</p>\n<p>再回頭時,身后大漠浩瀚,很寂靜,跟平日沒什么兩樣。</p>\n<p>山地前方,燈火搖曳,離山腳下還較遠時就聽到了一些嘈雜聲,那里不平靜,像是有什么事情正在發生。</p>\n<p>此外,還有牛羊等牲畜惶恐的叫聲,以及藏獒沉悶的低吼聲。</p>\n<p>有異常之事嗎?楚風加快腳步,趕到山腳下,臨近牧民的棲居地。</p>','text': '大漠孤煙直,長河落日圓。\n一望無垠的大漠,空曠而高遠,壯闊而雄渾,當紅日西墜,地平線盡頭一片殷紅,磅礴中亦有種蒼涼感。\n上古的烽煙早已在歲月中逝去,黃河古道雖然幾經變遷,但依舊在。\n楚風一個人在旅行,很疲憊,他躺在黃沙上,看著血色的夕陽,不知道還要多久才能離開這片大漠。\n數日前他畢業了,同時也跟校園中的女神說再見,或許見不到了吧,畢竟他曾被委婉的告知,從此天各一方,該分手了。\n離開學院后,他便出來旅行。\n落日很紅,掛在大漠的盡頭,在空曠中有一種寧靜的美。\n楚風坐起來喝了一些水,感覺精力恢復了不少,他的身體屬于修長強健那一類型,體質非常好,疲憊漸消退。\n站起來眺望,他覺得快要離開大漠了,再走一段路程或許就會見到牧民的帳篷,他決定繼續前行。\n一路西進,他在大漠中留下一串很長、很遠的腳印。\n無聲無息,竟起霧了,這在沙漠中非常罕見。\n楚風驚訝,而這霧竟然是藍色的,在這深秋季節給人一種涼意。\n不知不覺間,霧靄漸重,藍色繚繞,朦朦朧朧,籠罩了這片沙漠。\n大漠盡頭,落日都顯得有些詭異了,漸漸化成一輪藍日,有種魔性的美,而火云也被染成了藍色。\n楚風皺眉,雖然他知道,沙漠的天氣最是多變,但眼前實在不太正常。\n一片寂靜,他停下腳步。\n在進大漠前,他曾聽當地的老牧民講過,一個人走在沙漠中,有時會聽到一些古怪的聲音,會見到一些奇異的東西,要格外謹慎。\n當時他并未在意。\n依舊寧靜,沙漠中除卻多了一層朦朧的藍霧,并沒有其他變故發生,楚風加快腳步,他想盡快離開這里。\n大漠的盡頭,落日藍的妖異,染藍了西部的天空,不過它終究快要消失在地平線上了。\n楚風的速度越來越快,開始奔跑,他不想呆在這種詭異、充滿不確定性的地方。\n在沙漠中,海市蜃樓那樣的奇景多發生在烈日當空下,眼下不相符,這不像是什么蜃景。\n突然,前面傳來輕響,像是有什么東西破沙而出,而且聲音很密集,此起彼伏。\n楚風倏地停下腳步,盯著沙漠,前方地面藍光星星點點,像是散落一地藍鉆,晶瑩透亮,在落日的余暉中閃耀著。\n那是一棵又一棵嫩苗,不足一寸高,自沙漠中破土而出,帶著美麗的光澤,剔透而妖異,遍地皆是。\n短暫的停滯,隨后沙沙聲成片,藍色燦燦,所有嫩苗都快速拔高,一瞬間生長起來。\n天邊,藍日下沉,即將消失,霧氣彌漫,浩瀚的大漠如同披上了一層詭異的藍色薄紗。\n“啵!”\n花朵綻放的聲音傳出,沙漠中一片湛藍,在夕陽即將消失的剎那,這些植物開始綻放出成片的花朵。\n大量的藍花,晶瑩點點,猶若夢幻,有些醉人,遍開在沙漠中,非常不真實。\n這種植物一尺多高,通體如藍珊瑚般透亮,花瓣一條條,妖艷而迷人,宛若盛放在另一片國度,帶著魔性,吸引人的心神。\n楚風退后一步,然而,身后也已滿是這種植物,藍光流動,一眼望不到邊。\n他很吃驚,仔細的看著,努力辨認,這像極了彼岸花,一條條花瓣展開,又向后彎曲,極其美麗。\n不過,彼岸花紅的鮮艷,而它卻是藍色的,從未聽聞有藍色彼岸花。\n彼岸花真實存在,帶著濃烈的宗教色彩,關于它有太多的傳說,但楚風不信這些,只為眼前的景象而驚。\n沙漠干燥、缺水,只有極其稀少的耐旱植物偶爾可見,零星散落著。而彼岸花喜歡陰森、潮濕的環境,無論如何也不該在這里出現,還如此的妖艷。\n這里遍地都是,一眼望不到盡頭。\n大漠浩瀚,薄霧染藍了落日,浸透了天邊,而整片空曠無垠的沙漠都生出藍色的彼岸花,說不出的奇異、神秘!\n一縷淡淡的芬芳飄漾,讓人沉迷。\n楚風用力搖頭,小心的邁步,避開這些花,他發現只有一個地帶沒有這種植物,那就是———黃河古道。\n在歲月中多次變遷,幾經改道,它貫穿這片大漠,如今已近干涸,藍色彼岸花開遍兩岸,擁簇著它。\n花開兩岸,彼此遙見。\n終于,太陽沉下去了,而也正是在此時,這些植物盛放,花開到極致,化作藍色的海洋,流光溢彩。\n雖然暮色降臨,但這里藍色光澤繚繞,極致炫目,艷麗的出奇。\n楚風站在黃河古道上,心中無法寧靜,但是他卻不作停留,沿河道快速前進。\n天色漸暗,最后的落日余暉也已不見了。\n藍色的大漠光彩點點,而后突然間,砰然一聲,所有藍色彼岸花怒放后,竟然在一瞬間同時凋零。\n妖艷的花瓣枯萎,接著整株的植物開始干枯,它們失去色彩,耗盡生機,迅速發黃,而后碎裂,像是在一瞬間失去了數十年。\n“砰!”\n最后的剎那,遍地干枯的藍色彼岸花寸寸斷裂,化成了粉末。\n這詭異的景象,很難解釋。\n它們如同煙花般,短暫的絢爛,美麗到極致,而后便凋零,成為灰燼。\n枯黃的粉末落在沙地間,在暮色中很難辨出,而此時藍霧也早已消失,大漠恢復了原樣,像是什么都不曾發生過,再次寧靜。\n楚風沒有駐足,大步前行,在暮色中,他翻過許多座沙丘,終于見到了地平線上的山影,要離開大漠了。\n天色漸黑,他終于走出來了,清晰的看到了山地,也隱約間看到了山腳下牧民的帳篷。\n再回頭時,身后大漠浩瀚,很寂靜,跟平日沒什么兩樣。\n山地前方,燈火搖曳,離山腳下還較遠時就聽到了一些嘈雜聲,那里不平靜,像是有什么事情正在發生。\n此外,還有牛羊等牲畜惶恐的叫聲,以及藏獒沉悶的低吼聲。\n有異常之事嗎?楚風加快腳步,趕到山腳下,臨近牧民的棲居地。','type': 'article','title': '第一章 沙漠中的彼岸花'}]}以上就是我們調用API后返回的解析內容,是不是把文章標題,內容,還有跟新時間都準確的解析出來了。
關于更多操作可以查看官方的API文檔(https://www.diffbot.com/dev/docs/article/)
這里列舉幾個常用的可選參數:
- fields: 用來制定返回那些字段,默認已經有了一些固定字段,還可以制定額外返回那些可選字段。
- paging:如果是多頁文章,將這個參數設置為Fasle則可以禁止多頁內容拼接。
- maxTags: 可以設置返回的Tag最大數,默認是10個。
- tagConfidence: 設置置信度的閾值,超過這個值的tag才會被返回,默認是0.5.
- discussion: 如果將這個參數設置為False,那么就不會解析評論的內容。
- timeout: 解析最大時間,默認是30秒。
- callback: 為JSONP類型的請求而設計的回調。
關于fields字段,專門列舉一下里面的參數:
首先是一些固定字段 - type: 文本的類型,這里就是article。
- title: 文章的標題。
- text: 文章的純文本內容,如果有分段內容,就會以換行符來表示。
- html: 提取結果的html內容
- data: 文章的發布時間,其格式為PFC1123
- estimateDate: 如果日期時間不太明確,就會返回一個預估時間,如果文章超過兩天或者沒有發布如期,那么這個字段就不會返回。
- author: 作者。
- authorUrl: 作者鏈接。
- discussion: 評論內容。
- humanLanguage: 語言類型。
- numPage: 如果文章是多頁的,這個參數會控制最大的翻頁拼接數目。
- nextPages: 如果文章是多頁的,這個參數可以指定文章的后續鏈接。
- siteName: 站點名稱。
- publisherRegion: 文章的發布地區。
- publisherCountry: 文章的發布國家。
- pageUrl: 文章的鏈接。
- resolvedPageUrl: 如果文章是從pageUrl重定向過來的,則返回此內容。
- tags:文章的標簽或者文章包含的實體,根據自然語言處理技術和DBpedia計算生成,是一個列表,里面又包含了子字段:
- label: 標簽名。
- count:標簽出現的次數。
- score: 標簽的置信度。
- rdfTypes:如果實體可以由多個資源表示,那么則返回相關的URL。
- type: 類型。
- uri:Diffbot Knowledge Graph中的實體鏈接。
- images: 文章中包含的圖片。
- videos: 文章中包含的視屏。
- breadcrumb: 面包屑導航信息。
- diffbotUrl: Diffbot內部的URL鏈接。
擴展的可選字段 - quotes: 引用信息。
- sentiment: 文章的情感值,-1到1之間。
- links:所有超鏈接的頂級鏈接。
- querystring: 請求的參數列表。
搬運過程可能出錯,準確內容參照官方的api文檔!
另外Diffbot還提供了幾乎所有語言的SDK,其實本質上就是調用了requests庫。這里就不介紹了,下面附上鏈接:https://github.com/diffbot/diffbot-python-client
這個庫并沒有發布到pypi上,需要自己下載并導入才能用,有興趣的可以下載來看一下。
@快樂是一切
總結
以上是生活随笔為你收集整理的爬虫的智能化解析之使用Diffbot自动解析页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地图的经纬网格线
- 下一篇: BUUCTF[GYCTF2020]Bla