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