beautifulsoup解析动态页面div未展开_两个资讯爬虫解析库的用法与对比
閱讀本文大概需要 10?分鐘。
”輿情爬蟲是網絡爬蟲一個比較重要的分支,輿情爬蟲往往需要爬蟲工程師爬取幾百幾千個新聞站點。比如一個新聞頁面我們需要爬取其標題、正文、時間、作者等信息,如果用傳統的方式來實現,每一個站點都要配置非常多的規則,如果要維護一個幾百上千的站點,那人力成本簡直太高了。
如果有一種方式可以在保證差不多的準確率的前提下,大幅提高提取效率的話,就需要用到智能文本提取了。
本文首先介紹一下智能文本提取的基本原理,讓大家對智能提取有基本的了解。然后介紹幾個比較基礎的工具包,準確率并不是很高,可以嘗試一用。最后再介紹幾篇比較前沿的技術供大家參考。
智能文本提取
目前來說,智能文本提取可以分為三類:
基于網頁文檔內容的提取方法
基于 DOM 結構信息的提取方法
基于視覺信息的提取方法
基于網頁文檔的提取方法將 HTML 文檔視為文本進行處理,適用于處理含有大量文本信息且結構簡單易于處理的單記錄網頁,或者具有實時要求的在線分析網頁應用。這種方式主要利用自然語言處理相關技術實現,通過理解 文本語義、分析上下文、設定提取規則等,實現對大段網頁文檔的快速處理。其中,較為知名的方法有TSIMMIS、Web-OQL、Serrano、FAR-SW 和 FOREST,但這些方法由于通常需要人工的參與,且存在耗時長、效率低的弊端。
基于 DOM 結構信息的方法將 HTML 文檔解析為相應的 DOM 樹,然后根據 DOM 樹的語法結構創建提取規則, 相對于以前的方法而言有了更高的性能和準確率。W4F 和 XWRAP 將 HTML 文檔解析成 DOM 樹,然后通過組件化引導用戶通過人工選擇或者標記生成目標包裝器代碼。Omini、IEPAD 和 ITE 提取 DOM 樹上的關鍵路徑, 獲取其中存在的重復模式。MDR 和 DEPTA 挖掘了頁面中的數據區域,得到數據記錄的模式。CECWS 通過聚類算法從數據庫中提取出自同一網站的一組頁面,并進行 DOM 樹結構的對比,刪除其中的靜態部分,保留動態內容作為信息提取的結果。雖然此類方法相對于上一類方法 具有較高的提取精度,且克服了對大段連續文本的依賴, 但由于網頁的 DOM 樹通常較深,含有大量 DOM 節點, 因此基于 DOM 結構信息的方法具有較高的時間和空間消耗。目前來說,大部分原理還是基于 DOM 節點的文本密度、標點符號密度等計算的,其準確率還是比較可觀的。今天所介紹的 Readability 和 Newspaper 的庫的實現原理就是類似。
目前比較先進的是基于視覺信息的網頁信息提取方法,通過瀏覽器接口或者內核對目標網頁預渲染,然后基于網頁的視覺規律提取網頁數據記錄。經典的 VIPS 算法首先從 DOM 樹中提取出所有合適的頁面區域,然后根據這些頁面和分割條重新構建 Web 頁面的語義結構。作為對 VIPS 的拓展,ViNT、ViPER、ViDE 也成功利用了網頁的視覺特征來實現數據提取。CMDR 為通過神經網絡學習多記錄型頁面中的特征,結合基于 DOM 結構信息的 MDR 方法,挖掘社區論壇頁面的數據區域。與上述方法不同,VIBS 將圖像領域的 CNN 卷積神經網絡運用于網頁的截圖,同時通過類 VIPS 算法生成視覺塊,最后結合兩個階段的結果識別網頁的正文區域。另外還有最新的國內提出的 VBIE 方法,基于網頁視覺的基礎上改進,可以實現無監督的網頁信息提取。
以上內容主要參考自論文:《王衛紅等:基于可視塊的多記錄型復雜網頁信息提取算法》,算法可從該論文參考文獻查閱。
下面我們來介紹兩個比較基礎的工具包 Readability 和 Newspaper 的用法,這兩個包經我測試其實準確率并不是很好,主要是讓大家大致對智能解析有初步的理解。后面還會介紹一些更加強大的智能化解析算法。
Readability
Readability 實際上是一個算法,并不是一個針對某個語言的庫。其主要原理就是計算了 DOM 的文本密度,另外根據一些常見的 DOM 屬性如 id、class 等計算了一些 DOM 的權重,最后分析得到了對應的 DOM 區塊,進而提取出具體的文本內容。
現在搜索 Readability 其實已經找不到了,取而代之的是一個 JavaScript 工具包,叫做 mercury-parser,據我所知應該是 Readability 不維護了,換成了 mercury-parser。后者現在也做成了一個 Chrome 插件,大家可以下載使用一下。
回歸正題,這次主要介紹的是 Python 的 Readability 實現,現在其實有很多開源版本,本文選取的是 https://github.com/buriy/python-readability,是基于最早的 Python 版本的 Readability 庫 https://github.com/timbertson/python-readability 二次開發的,現在已經發布到了 PyPi,大家可以直接下載安裝使用。
安裝很簡單,通過 pip 安裝即可:
pip3?install?readability-lxml安裝好了之后便可以通過導入 readability 使用了,下面我們隨便從網上找一個新聞頁面,比如:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,其頁面截圖如下:
頁面示例我們的目的就是它的正文、標題等內容。下面我們用 Readability 試一下,示例如下:
import?requestsfrom?readability?import?Document
url?=?'https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html'
html?=?requests.get(url).content
doc?=?Document(html)
print('title:',?doc.title())
print('content:',?doc.summary(html_partial=True))
在這里我們直接用 requests 庫對網頁進行了請求,獲取了其 HTML 頁面內容,賦值為 html。
然后引入了 readability 里的 Document 類,使用 html 變量對其進行初始化,然后我們分別調用了 title 方法和 summary 方法獲得了其標題和正文內容。
這里 title 方法就是獲取文章標題的,summary 就是獲取文章正文的,但是它獲取的正文可能包含一些 HTML 標簽。這個 summary 方法可以接收一個 html_partial 參數,如果設置為 True,返回的結果則不會再帶有 標簽。
看下運行結果:
title:?今年iPhone只有小改進?分析師:還有其他亮點_網易科技content:?<div><div?class="post_text"?id="endText">???????????
????????????????????<p?class="otitle">
????????????????????????(原標題:Apple Bets More Cameras Can Keep iPhone Humming)
????????????????????p>
????????????????????<p?class="f_center"><img?alt="今年iPhone只有小改進?分析師:還有其他亮點"?src="http://cms-bucket.ws.126.net/2019/09/09/d65ba32672934045a5bfadd27f704bc1.jpeg"/><span>圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。span>p><p>網易科技訊?9月9日消息,據國外媒體報道,和過去的12個年頭一樣,新款
...?中間省略?...
????????????????????<p>蘋果還即將推出包括電視節目和視頻游戲等內容的新訂閱服務。分析師表示,該公司最早可能在本周宣布TV+和Arcade等服務的價格和上線時間。p><p>Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設備和服務的結合將是蘋果業務超越iPhone的關鍵。他說,上一家手機巨頭諾基亞公司在試圖進行類似業務轉型時就陷入了困境之中。(辰辰)p><p><b>相關報道:b>p><p><a?href="https://tech.163.com/19/0908/09/EOHS53RK000999LD.html"?target="_self"?urlmacroreplace="false">iPhone 11背部蘋果Logo改為居中:為反向無線充電a>p><p><a?href="https://tech.163.com/19/0907/08/EOF60CBC00097U7S.html"?target="_self"?urlmacroreplace="false">2019年新iPhone傳言匯總,你覺得哪些能成真a>??p><p/>
????????????????????????<p/>
????????????????????????<div?class="ep-source?cDGray">
????????????????????????????<span?class="left"><a?href="http://tech.163.com/"><img?src="https://static.ws.126.net/cnews/css13/img/end_tech.png"?alt="王鳳枝"?class="icon"/>a>?本文來源:網易科技報道??span>
????????????????????????????<span?class="ep-editor">責任編輯:王鳳枝_NT2541span>
????????????????????????div>
????????????????div>?
div>
可以看到,標題提取是正確的。正文其實也是正確的,不過這里還包含了一些 HTML 標簽,比如 、 等,我們可以進一步通過一些解析庫來解析。
看下源碼吧,比如提取標題的方法:
def?normalize_entities(cur_title):????entities?=?{
????????u'\u2014':'-',
????????u'\u2013':'-',
????????u'—':?'-',
????????u'–':?'-',
????????u'\u00A0':?'?',
????????u'\u00AB':?'"',
????????u'\u00BB':?'"',
????????u'"':?'"',
????}
????for?c,?r?in?entities.items():
????????if?c?in?cur_title:
????????????cur_title?=?cur_title.replace(c,?r)
????return?cur_title
def?norm_title(title):
????return?normalize_entities(normalize_spaces(title))
def?get_title(doc):
????title?=?doc.find('.//title')
????if?title?is?None?or?title.text?is?None?or?len(title.text)?==?0:
????????return?'[no-title]'
????return?norm_title(title.text)
?def?title(self):
????"""Returns?document?title"""
????return?get_title(self._html(True))
title 方法實際上就是調用了一個 get_title 方法,它怎么做的?實際上就是用了一個 XPath 只解析了 標簽里面的內容,別的沒了。如果沒有,那就返回 [no-title]。
def?summary(self,?html_partial=False):????ruthless?=?True
????while?True:
????????self._html(True)
????????for?i?in?self.tags(self.html,?'script',?'style'):
????????????i.drop_tree()
????????for?i?in?self.tags(self.html,?'body'):
????????????i.set('id',?'readabilityBody')
????????if?ruthless:
????????????self.remove_unlikely_candidates()
????????self.transform_misused_divs_into_paragraphs()
????????candidates?=?self.score_paragraphs()
????????best_candidate?=?self.select_best_candidate(candidates)
????????if?best_candidate:
????????????article?=?self.get_article(candidates,?best_candidate,
???????????????????????????????????????html_partial=html_partial)
????????else:
????????????if?ruthless:
????????????????ruthless?=?False
????????????????continue
????????????else:
????????????????article?=?self.html.find('body')
????????????????if?article?is?None:
????????????????????article?=?self.html
????????cleaned_article?=?self.sanitize(article,?candidates)
????????article_length?=?len(cleaned_article?or?'')
????????retry_length?=?self.retry_length
????????of_acceptable_length?=?article_length?>=?retry_length
????????if?ruthless?and?not?of_acceptable_length:
????????????ruthless?=?False
????????????continue
????????else:
????????????return?cleaned_article
這里我刪除了一些冗余的調試的代碼,只保留了核心的代碼,其核心實現就是先去除一些干擾內容,然后找出一些疑似正文的 candidates,然后再去尋找最佳匹配的 candidates 最后提取其內容返回即可。
然后再找到獲取 candidates 方法里面的 score_paragraphs 方法,又追蹤到一個 score_node 方法,就是為每一個節點打分的,其實現如下:
def?score_node(self,?elem):????content_score?=?self.class_weight(elem)
????name?=?elem.tag.lower()
????if?name?in?["div",?"article"]:
????????content_score?+=?5
????elif?name?in?["pre",?"td",?"blockquote"]:
????????content_score?+=?3
????elif?name?in?["address",?"ol",?"ul",?"dl",?"dd",?"dt",?"li",?"form",?"aside"]:
????????content_score?-=?3
????elif?name?in?["h1",?"h2",?"h3",?"h4",?"h5",?"h6",?"th",?"header",?"footer",?"nav"]:
????????content_score?-=?5
????return?{
????????'content_score':?content_score,
????????'elem':?elem
????}
這什么意思呢?你看如果這個節點標簽是 div 或者 article 等可能表征正文區塊的話,就加 5 分,如果是 aside 等表示側欄的內容就減 3 分。這些打分也沒有什么非常標準的依據,可能是根據經驗累積的規則。
另外還有一些方法里面引用了一些正則匹配來進行打分或者替換,其定義如下:
REGEXES?=?{????'unlikelyCandidatesRe':?re.compile('combx|comment|community|disqus|extra|foot|header|menu|remark|rss|shoutbox|sidebar|sponsor|ad-break|agegate|pagination|pager|popup|tweet|twitter',?re.I),
????'okMaybeItsACandidateRe':?re.compile('and|article|body|column|main|shadow',?re.I),
????'positiveRe':?re.compile('article|body|content|entry|hentry|main|page|pagination|post|text|blog|story',?re.I),
????'negativeRe':?re.compile('combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|shoutbox|sidebar|sponsor|shopping|tags|tool|widget',?re.I),
????'divToPElementsRe':?re.compile(',?re.I),#'replaceBrsRe':?re.compile('(
]*>[?\n\r\t]*){2,}',re.I),#'replaceFontsRe':?re.compile(']*>',re.I),#'trimRe':?re.compile('^\s+|\s+$/'),#'normalizeRe':?re.compile('\s{2,}/'),#'killBreaksRe':?re.compile('(
(\s| ?)*){1,}/'),'videoRe':?re.compile('https?:\/\/(www\.)?(youtube|vimeo)\.com',?re.I),#skipFootnoteLink:??????/^\s*(\[?[a-z0-9]{1,2}\]?|^|edit|citation?needed)\s*$/i,
}
比如這里定義了 unlikelyCandidatesRe,就是不像 candidates 的 pattern,比如 foot、comment 等等,碰到這樣的標簽或 pattern 的話,在計算分數的時候都會減分,另外還有其他的 positiveRe、negativeRe 也是一樣的原理,分別對匹配到的內容進行加分或者減分。
這就是 Readability 的原理,是基于一些規則匹配的打分模型,很多規則其實來源于經驗的累積,分數的計算規則應該也是不斷地調優得出來的。
另外其他的就沒了,Readability 并沒有提供提取時間、作者的方法,另外此種方法的準確率也是有限的,但多少還是省去了一些人工成本。
Newspaper
另外還有一個智能解析的庫,叫做 Newspaper,提供的功能更強一些,但是準確率上個人感覺和 Readability 差不太多。
這個庫分為 Python2 和 Python3 兩個版本,Python2 下的版本叫做 newspaper,Python3 下的版本叫做 newspaper3k,這里我們使用 Python3 版本來進行測試。
其 GitHub 地址是:https://github.com/codelucas/newspaper,官方文檔地址是:https://newspaper.readthedocs.io。
在安裝之前需要安裝一些依賴庫,可以參考官方的說明:https://github.com/codelucas/newspaper#get-it-now。
安裝好必要的依賴庫之后,就可以使用 pip 安裝了:
pip3?install?newspaper3k安裝成功之后便可以導入使用了。
下面我們先用官方提供的實例來過一遍它的用法,官方提供的示例是使用了這個鏈接:https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/,其頁面截圖如下:
官方示例下面用一個實例來感受一下:
from?newspaper?import?Articleurl?=?'https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'
article?=?Article(url)
article.download()
#?print('html:',?article.html)
article.parse()
print('authors:',?article.authors)
print('date:',?article.publish_date)
print('text:',?article.text)
print('top?image:',?article.top_image)
print('movies:',?article.movies)
article.nlp()
print('keywords:',?article.keywords)
print('summary:',?article.summary)
這里從 newspaper 庫里面先導入了 Article 這個類,然后直接傳入 url 即可,首先需要調用它的 download 方法,將網頁爬取下來,否則直接進行解析會拋出錯誤的。
但我總感覺這個設計挺不友好的,parse 方法不能判斷下,如果沒執行 download 就自動執行 download 方法嗎?如果不 download 其他的不什么都干不了嗎?
好的,然后我們再執行 parse 方法進行網頁的智能解析,這個功能就比較全了,能解析 authors、publish_date、text 等等,除了正文還能解析作者、發布時間等等。
另外這個庫還提供了一些 NLP 的方法,比如獲取關鍵詞、獲取文本摘要等等,在使用前需要先執行以下 nlp 方法。
最后運行結果如下:
authors:?['Cnn?Wire']date:?2013-12-30?00:00:00
text:?By?Leigh?Ann?Caldwell
WASHINGTON?(CNN)?—?Not?everyone?subscribes?to?a?New?Year’s?resolution,?but?Americans?will?be?required?to?follow?new?laws?in?2014.
Some?40,000?measures?taking?effect?range?from?sweeping,?national?mandates?under?Obamacare?to?marijuana?legalization?in?Colorado,?drone?prohibition?in?Illinois?and?transgender?protections?in?California.
Although?many?new?laws?are?controversial,?they?made?it?through?legislatures,?public?referendum?or?city?councils?and?represent?the?shifting?composition?of?American?beliefs.
...
...
Colorado:?Marijuana?becomes?legal?in?the?state?for?buyers?over?21?at?a?licensed?retail?dispensary.
(Sourcing:?much?of?this?list?was?obtained?from?the?National?Conference?of?State?Legislatures).
top?image:?https://localtvkstu.files.wordpress.com/2012/04/national-news-e1486938949489.jpg?quality=85&strip=all
movies:?[]
keywords:?['drones',?'national',?'guns',?'wage',?'law',?'pot',?'leave',?'family',?'states',?'state',?'latest',?'obamacare',?'minimum',?'laws']
summary:?Oregon:?Family?leave?in?Oregon?has?been?expanded?to?allow?eligible?employees?two?weeks?of?paid?leave?to?handle?the?death?of?a?family?member.
Arkansas:?The?state?becomes?the?latest?state?requiring?voters?show?a?picture?ID?at?the?voting?booth.
Minimum?wage?and?former?felon?employmentWorkers?in?13?states?and?four?cities?will?see?increases?to?the?minimum?wage.
New?Jersey?residents?voted?to?raise?the?state’s?minimum?wage?by?$1?to?$8.25?per?hour.
California?is?also?raising?its?minimum?wage?to?$9?per?hour,?but?workers?must?wait?until?July?to?see?the?addition.
這里省略了一些輸出結果。
可以看到作者、日期、正文、關鍵詞、標簽、縮略圖等信息都被打印出來了,還算是不錯的。
但這個畢竟是官方的實例,肯定是好的,我們再測試一下剛才的例子,看看效果如何,網址還是:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,改寫代碼如下:
from?newspaper?import?Articleurl?=?'https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html'
article?=?Article(url,?language='zh')
article.download()
#?print('html:',?article.html)
article.parse()
print('authors:',?article.authors)
print('title:',?article.title)
print('date:',?article.publish_date)
print('text:',?article.text)
print('top?image:',?article.top_image)
print('movies:',?article.movies)
article.nlp()
print('keywords:',?article.keywords)
print('summary:',?article.summary)
這里我們將鏈接換成了新聞的鏈接,另外在 Article 初始化的時候還加了一個參數 language,其值為 zh,代表中文。
然后我們看下運行結果:
Building?prefix?dict?from?/usr/local/lib/python3.7/site-packages/jieba/dict.txt?...Dumping?model?to?file?cache?/var/folders/1g/l2xlw12x6rncs2p9kh5swpmw0000gn/T/jieba.cache
Loading?model?cost?1.7178938388824463?seconds.
Prefix?dict?has?been?built?succesfully.
authors:?[]
title:?今年iPhone只有小改進?分析師:還有其他亮點
date:?2019-09-09?08:10:26+08:00
text:?(原標題:Apple Bets More Cameras Can Keep?iPhone?Humming)
圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。
網易科技訊?9月9日消息,據國外媒體報道,和過去的12個年頭一樣,新款iPhone將成為蘋果公司本周所舉行年度宣傳活動的主角。但人們的注意力正轉向需要推動增長的其他蘋果產品和服務。
...
...
Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設備和服務的結合將是蘋果業務超越iPhone的關鍵。他說,上一家手機巨頭諾基亞公司在試圖進行類似業務轉型時就陷入了困境之中。(辰辰)
相關報道:
iPhone?11背部蘋果Logo改為居中:為反向無線充電
2019年新iPhone傳言匯總,你覺得哪些能成真
top?image:?https://www.163.com/favicon.ico
movies:?[]
keywords:?['trust高級投資組合經理丹摩根dan',?'iphone',?'mawston表示可穿戴設備和服務的結合將是蘋果業務超越iphone的關鍵他說上一家手機巨頭諾基亞公司在試圖進行類似業務轉型時就陷入了困境之中辰辰相關報道iphone',?'xs的銷售疲軟狀況迫使蘋果在1月份下調了業績預期這是逾15年來的第一次據貿易公司susquehanna',?'xs機型發布后那種令人失望的業績重演iphone',?'今年iphone只有小改進分析師還有其他亮點',?'more',?'xr和iphone',?'morgan說他們現在沒有任何真正深入的進展只是想繼續讓iphone這款業務繼續轉下去他樂觀地認為今年發布的新款手機將有足夠多的新功能為一個非常成熟的產品增加額外的功能讓火車繼續前進這種僅限于此的態度說明了蘋果自2007年發布首款iphone以來所面臨的挑戰iphone銷售占蘋果公司總營收的一半以上這讓蘋果陷入了一個尷尬的境地既要維持核心產品的銷量另一方面又需要減少對它的依賴瑞銀ubs今年5月份對8000名智能手機用戶進行了相關調查其發布的年度全球調查報告顯示最近iphone在人臉識別技術等方面的進步并沒有引起一些消費者的共鳴他們基本上都認為蘋果產品沒有過去幾年那么獨特或者驚艷品牌也沒有過去幾年那么有吸引力很多人使用老款手機的時間更長自己認為也沒有必要升級到平均售價949美元的新款iphone蘋果需要在明年銷售足夠多的iphone以避免像去年9月份iphone',?'keep',?'原標題apple']
summary:?(原標題:Apple Bets More Cameras Can Keep?iPhone Humming)圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。網易科技訊?9月9日消息,據國外媒體報道,和過去的12個年頭一樣,新款iPhone將成為蘋果公司本周所舉行...亞公司在試圖進行類似業務轉型時就陷入了困境之中。(辰辰)相關報道:iPhone 11背部蘋果Logo改為居中:為反向無線充電2019年新iPhone傳言匯總,你覺得哪些能成真
中間正文很長省略了一部分,可以看到運行時首先加載了一些中文的庫包,比如 jieba 所依賴的詞表等等。
解析結果中,日期的確是解析對了,因為這個日期格式的的確比較規整,但這里還自動給我們加了東八區的時區,貼心了。作者沒有提取出來,可能是沒匹配到 來源 兩個字吧,或者詞庫里面沒有,標題、正文的提取還算比較正確,也或許這個案例的確是比較簡單。
另外對于 NLP 部分,獲取的關鍵詞比較迷,長度有點太長了。summary 也有點冗余。
另外 Newspaper 還提供了一個較為強大的功能,就是 build 構建信息源。官方的介紹其功能就是構建一個新聞源,可以根據傳入的 URL 來提取相關文章、分類、RSS 訂閱信息等等。
我們用實例感受一下:
import?newspapersource?=?newspaper.build('http://www.sina.com.cn/',?language='zh')
for?category?in?source.category_urls():
????print(category)
for?article?in?source.articles:
????print(article.url)
????print(article.title)
for?feed_url?in?source.feed_urls():
????print(feed_url)
在這里我們傳入了新浪的官網,調用了 build 方法,構建了一個 source,然后輸出了相關的分類、文章、RSS 訂閱等內容,運行結果如下:
http://cul.news.sina.com.cnhttp://www.sina.com.cn/
http://sc.sina.com.cn
http://jiangsu.sina.com.cn
http://gif.sina.com.cn
....
http://tj.sina.com.cn
http://travel.sina.com.cn
http://jiaoyi.sina.com.cn
http://cul.sina.com.cn
https://finance.sina.com.cn/roll/2019-06-12/doc-ihvhiqay5022316.shtml?
經參頭版:激發微觀主體活力加速國企改革
http://eladies.sina.com.cn/feel/xinli/2018-01-25/0722/doc-ifyqwiqk0463751.shtml?
我們別再聯系了
http://finance.sina.com.cn/roll/2018-05-13/doc-ihamfahx2958233.shtml?
新違約時代到來!違約“常態化”下的市場出清與換血
http://sports.sina.com.cn/basketball/2019worldcup/2019-09-08/doc-iicezzrq4390554.shtml?
羅健兒26分韓國收首勝
...
http://travel.sina.com.cn/outbound/pages/2019-09-05/detail-iicezzrq3622449.shtml?
菲律賓海濱大道?夜晚讓人迷離
http://travel.sina.com.cn/outbound/pages/2016-08-19/detail-ifxvcnrv0334779.shtml??
關島?用雙腳盡情享受陽光與海灘
http://travel.sina.com.cn/domestic/pages/2019-09-04/detail-iicezzrq3325092.shtml?
秋行查干浩特草原
http://travel.sina.com.cn/outbound/pages/2019-09-03/detail-iicezueu3050710.shtml?
白羊座的土豪之城迪拜
http://travel.sina.com.cn/video/baidang/2019-08-29/detail-ihytcitn2747327.shtml?
肯辛頓宮藏著維多利亞的秘密
http://cd.auto.sina.com.cn/bdcs/2017-08-15/detail-ifyixias1051586.shtml?
可以看到它輸出了非常多的類別鏈接,另外還有很多文章列表,由于沒有 RSS 訂閱內容,這里沒有顯示。
下面把站點換成我的博客:https://cuiqingcai.com,博客截圖如下:
博客截圖
看看運行結果:
https://cuiqingcai.comhttps://cuiqingcai.com
似乎不太行啊,一篇文章都沒有,RSS 也沒有,可見其功能還有待優化。
Newspaper 的基本用法介紹到這里,更加詳細的用法可以參考官方文檔:https://newspaper.readthedocs.io。個人感覺其中的智能解析可以用用,不過據我的個人經驗,感覺還是很多解析不對或者解析不全的,
以上便是 Readability 和 Newspaper 的介紹。
其他方案
另外除了這兩個庫其實還有一些比較優秀的算法,由于我們處理的大多為中文文檔,所以一些在中文上面的研究是比較有效的,在這里列幾個值得借鑒的中文論文供大家參考:
洪鴻輝等,基于文本及符號密度的網頁正文提取方法
梁東等,基于支持向量機的網頁正文內容提取方法
王衛紅等,基于可視塊的多記錄型復雜網頁信息提取算法
今天還看到一位大佬「青南」根據上面第一篇論文所實現的 GeneralNewsExtractor,GitHub 地址為:https://github.com/kingname/GeneralNewsExtractor,經測試準確率還不錯,比 Readability 和 Newspaper 的解析效果要好。我也跟作者進行了交流,后續可能還會基于其他的 Feature 或依賴于視覺化的方法進行優化,大家可以關注下,謝謝!
總結
以上是生活随笔為你收集整理的beautifulsoup解析动态页面div未展开_两个资讯爬虫解析库的用法与对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tablepc是什么平板电脑_54位平板
- 下一篇: 华为应用锁退出立即锁_面试官:你说说互斥