<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          爬蟲智能解析庫(kù) Readability 和 Newspaper 的用法

          共 15628字,需瀏覽 32分鐘

           ·

          2019-09-09 23:20

          閱讀本文大概需要 10?分鐘。


          輿情爬蟲是網(wǎng)絡(luò)爬蟲一個(gè)比較重要的分支,輿情爬蟲往往需要爬蟲工程師爬取幾百幾千個(gè)新聞?wù)军c(diǎn)。比如一個(gè)新聞頁(yè)面我們需要爬取其標(biāo)題、正文、時(shí)間、作者等信息,如果用傳統(tǒng)的方式來(lái)實(shí)現(xiàn),每一個(gè)站點(diǎn)都要配置非常多的規(guī)則,如果要維護(hù)一個(gè)幾百上千的站點(diǎn),那人力成本簡(jiǎn)直太高了。

          如果有一種方式可以在保證差不多的準(zhǔn)確率的前提下,大幅提高提取效率的話,就需要用到智能文本提取了。

          本文首先介紹一下智能文本提取的基本原理,讓大家對(duì)智能提取有基本的了解。然后介紹幾個(gè)比較基礎(chǔ)的工具包,準(zhǔn)確率并不是很高,可以嘗試一用。最后再介紹幾篇比較前沿的技術(shù)供大家參考。

          智能文本提取

          目前來(lái)說(shuō),智能文本提取可以分為三類:

          • 基于網(wǎng)頁(yè)文檔內(nèi)容的提取方法

          • 基于 DOM 結(jié)構(gòu)信息的提取方法

          • 基于視覺信息的提取方法

          基于網(wǎng)頁(yè)文檔的提取方法將 HTML 文檔視為文本進(jìn)行處理,適用于處理含有大量文本信息且結(jié)構(gòu)簡(jiǎn)單易于處理的單記錄網(wǎng)頁(yè),或者具有實(shí)時(shí)要求的在線分析網(wǎng)頁(yè)應(yīng)用。這種方式主要利用自然語(yǔ)言處理相關(guān)技術(shù)實(shí)現(xiàn),通過(guò)理解 文本語(yǔ)義、分析上下文、設(shè)定提取規(guī)則等,實(shí)現(xiàn)對(duì)大段網(wǎng)頁(yè)文檔的快速處理。其中,較為知名的方法有TSIMMIS、Web-OQL、Serrano、FAR-SW 和 FOREST,但這些方法由于通常需要人工的參與,且存在耗時(shí)長(zhǎng)、效率低的弊端。

          基于 DOM 結(jié)構(gòu)信息的方法將 HTML 文檔解析為相應(yīng)的 DOM 樹,然后根據(jù) DOM 樹的語(yǔ)法結(jié)構(gòu)創(chuàng)建提取規(guī)則, 相對(duì)于以前的方法而言有了更高的性能和準(zhǔn)確率。W4F 和 XWRAP 將 HTML 文檔解析成 DOM 樹,然后通過(guò)組件化引導(dǎo)用戶通過(guò)人工選擇或者標(biāo)記生成目標(biāo)包裝器代碼。Omini、IEPAD 和 ITE 提取 DOM 樹上的關(guān)鍵路徑, 獲取其中存在的重復(fù)模式。MDR 和 DEPTA 挖掘了頁(yè)面中的數(shù)據(jù)區(qū)域,得到數(shù)據(jù)記錄的模式。CECWS 通過(guò)聚類算法從數(shù)據(jù)庫(kù)中提取出自同一網(wǎng)站的一組頁(yè)面,并進(jìn)行 DOM 樹結(jié)構(gòu)的對(duì)比,刪除其中的靜態(tài)部分,保留動(dòng)態(tài)內(nèi)容作為信息提取的結(jié)果。雖然此類方法相對(duì)于上一類方法 具有較高的提取精度,且克服了對(duì)大段連續(xù)文本的依賴, 但由于網(wǎng)頁(yè)的 DOM 樹通常較深,含有大量 DOM 節(jié)點(diǎn), 因此基于 DOM 結(jié)構(gòu)信息的方法具有較高的時(shí)間和空間消耗。目前來(lái)說(shuō),大部分原理還是基于 DOM 節(jié)點(diǎn)的文本密度、標(biāo)點(diǎn)符號(hào)密度等計(jì)算的,其準(zhǔn)確率還是比較可觀的。今天所介紹的 Readability 和 Newspaper 的庫(kù)的實(shí)現(xiàn)原理就是類似。

          目前比較先進(jìn)的是基于視覺信息的網(wǎng)頁(yè)信息提取方法,通過(guò)瀏覽器接口或者內(nèi)核對(duì)目標(biāo)網(wǎng)頁(yè)預(yù)渲染,然后基于網(wǎng)頁(yè)的視覺規(guī)律提取網(wǎng)頁(yè)數(shù)據(jù)記錄。經(jīng)典的 VIPS 算法首先從 DOM 樹中提取出所有合適的頁(yè)面區(qū)域,然后根據(jù)這些頁(yè)面和分割條重新構(gòu)建 Web 頁(yè)面的語(yǔ)義結(jié)構(gòu)。作為對(duì) VIPS 的拓展,ViNT、ViPER、ViDE 也成功利用了網(wǎng)頁(yè)的視覺特征來(lái)實(shí)現(xiàn)數(shù)據(jù)提取。CMDR 為通過(guò)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)多記錄型頁(yè)面中的特征,結(jié)合基于 DOM 結(jié)構(gòu)信息的 MDR 方法,挖掘社區(qū)論壇頁(yè)面的數(shù)據(jù)區(qū)域。與上述方法不同,VIBS 將圖像領(lǐng)域的 CNN 卷積神經(jīng)網(wǎng)絡(luò)運(yùn)用于網(wǎng)頁(yè)的截圖,同時(shí)通過(guò)類 VIPS 算法生成視覺塊,最后結(jié)合兩個(gè)階段的結(jié)果識(shí)別網(wǎng)頁(yè)的正文區(qū)域。另外還有最新的國(guó)內(nèi)提出的 VBIE 方法,基于網(wǎng)頁(yè)視覺的基礎(chǔ)上改進(jìn),可以實(shí)現(xiàn)無(wú)監(jiān)督的網(wǎng)頁(yè)信息提取。

          以上內(nèi)容主要參考自論文:《王衛(wèi)紅等:基于可視塊的多記錄型復(fù)雜網(wǎng)頁(yè)信息提取算法》,算法可從該論文參考文獻(xiàn)查閱。

          下面我們來(lái)介紹兩個(gè)比較基礎(chǔ)的工具包 Readability 和 Newspaper 的用法,這兩個(gè)包經(jīng)我測(cè)試其實(shí)準(zhǔn)確率并不是很好,主要是讓大家大致對(duì)智能解析有初步的理解。后面還會(huì)介紹一些更加強(qiáng)大的智能化解析算法。

          Readability

          Readability 實(shí)際上是一個(gè)算法,并不是一個(gè)針對(duì)某個(gè)語(yǔ)言的庫(kù)。其主要原理就是計(jì)算了 DOM 的文本密度,另外根據(jù)一些常見的 DOM 屬性如 id、class 等計(jì)算了一些 DOM 的權(quán)重,最后分析得到了對(duì)應(yīng)的 DOM 區(qū)塊,進(jìn)而提取出具體的文本內(nèi)容。

          現(xiàn)在搜索 Readability 其實(shí)已經(jīng)找不到了,取而代之的是一個(gè) JavaScript 工具包,叫做 mercury-parser,據(jù)我所知應(yīng)該是 Readability 不維護(hù)了,換成了 mercury-parser。后者現(xiàn)在也做成了一個(gè) Chrome 插件,大家可以下載使用一下。

          回歸正題,這次主要介紹的是 Python 的 Readability 實(shí)現(xiàn),現(xiàn)在其實(shí)有很多開源版本,本文選取的是 https://github.com/buriy/python-readability,是基于最早的 Python 版本的 Readability 庫(kù) https://github.com/timbertson/python-readability 二次開發(fā)的,現(xiàn)在已經(jīng)發(fā)布到了 PyPi,大家可以直接下載安裝使用。

          安裝很簡(jiǎn)單,通過(guò) pip 安裝即可:

          pip3?install?readability-lxml

          安裝好了之后便可以通過(guò)導(dǎo)入 readability 使用了,下面我們隨便從網(wǎng)上找一個(gè)新聞頁(yè)面,比如:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,其頁(yè)面截圖如下:

          57bc228417a4ce950cd47d22f9e902b7.webp頁(yè)面示例

          我們的目的就是它的正文、標(biāo)題等內(nèi)容。下面我們用 Readability 試一下,示例如下:

          import?requests
          from?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 庫(kù)對(duì)網(wǎng)頁(yè)進(jìn)行了請(qǐng)求,獲取了其 HTML 頁(yè)面內(nèi)容,賦值為 html。

          然后引入了 readability 里的 Document 類,使用 html 變量對(duì)其進(jìn)行初始化,然后我們分別調(diào)用了 title 方法和 summary 方法獲得了其標(biāo)題和正文內(nèi)容。

          這里 title 方法就是獲取文章標(biāo)題的,summary 就是獲取文章正文的,但是它獲取的正文可能包含一些 HTML 標(biāo)簽。這個(gè) summary 方法可以接收一個(gè) html_partial 參數(shù),如果設(shè)置為 True,返回的結(jié)果則不會(huì)再帶有 標(biāo)簽。

          看下運(yùn)行結(jié)果:

          title:?今年iPhone只有小改進(jìn)?分析師:還有其他亮點(diǎn)_網(wǎng)易科技
          content:?<div><div?class="post_text"?id="endText">???????????
          ????????????????????<p?class="otitle">
          ????????????????????????(原標(biāo)題:Apple Bets More Cameras Can Keep iPhone Humming)
          ????????????????????p>
          ????????????????????<p?class="f_center"><img?alt="今年iPhone只有小改進(jìn)?分析師:還有其他亮點(diǎn)"?src="http://cms-bucket.ws.126.net/2019/09/09/d65ba32672934045a5bfadd27f704bc1.jpeg"/><span>圖示:蘋果首席執(zhí)行官蒂姆·庫(kù)克(Tim Cook)在6月份舉行的蘋果全球開發(fā)者大會(huì)上。span>p><p>網(wǎng)易科技訊?9月9日消息,據(jù)國(guó)外媒體報(bào)道,和過(guò)去的12個(gè)年頭一樣,新款
          ...?中間省略?...
          ????????????????????<p>蘋果還即將推出包括電視節(jié)目和視頻游戲等內(nèi)容的新訂閱服務(wù)。分析師表示,該公司最早可能在本周宣布TV+和Arcade等服務(wù)的價(jià)格和上線時(shí)間。p><p>Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設(shè)備和服務(wù)的結(jié)合將是蘋果業(yè)務(wù)超越iPhone的關(guān)鍵。他說(shuō),上一家手機(jī)巨頭諾基亞公司在試圖進(jìn)行類似業(yè)務(wù)轉(zhuǎn)型時(shí)就陷入了困境之中。(辰辰)p><p><b>相關(guān)報(bào)道:b>p><p><a?href="https://tech.163.com/19/0908/09/EOHS53RK000999LD.html"?target="_self"?urlmacroreplace="false">iPhone 11背部蘋果Logo改為居中:為反向無(wú)線充電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>?本文來(lái)源:網(wǎng)易科技報(bào)道??span>
          ????????????????????????????<span?class="ep-editor">責(zé)任編輯:王鳳枝_NT2541span>
          ????????????????????????div>
          ????????????????div>?
          div>

          可以看到,標(biāo)題提取是正確的。正文其實(shí)也是正確的,不過(guò)這里還包含了一些 HTML 標(biāo)簽,比如

          等,我們可以進(jìn)一步通過(guò)一些解析庫(kù)來(lái)解析。

          看下源碼吧,比如提取標(biāo)題的方法:

          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 方法實(shí)際上就是調(diào)用了一個(gè) get_title 方法,它怎么做的?實(shí)際上就是用了一個(gè) XPath 只解析了 </code> 標(biāo)簽里面的內(nèi)容,別的沒了。如果沒有,那就返回 <code style="font-size:inherit;color:rgb(233,105,0);">[no-title]</code>。</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-function" style="font-size:inherit;color:rgb(248,35,117);"><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;">def</span>?<span id="go7utgvlrp" class="hljs-title" style="font-size:inherit;color:rgb(165,218,45);">summary</span><span id="go7utgvlrp" class="hljs-params" style="font-size:inherit;color:rgb(255,152,35);">(self,?html_partial=False)</span>:</span><br />????ruthless?=?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">True</span><br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">while</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">True</span>:<br />????????self._html(<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">True</span>)<br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?i?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?self.tags(self.html,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'script'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'style'</span>):<br />????????????i.drop_tree()<br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?i?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?self.tags(self.html,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'body'</span>):<br />????????????i.set(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'id'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'readabilityBody'</span>)<br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?ruthless:<br />????????????self.remove_unlikely_candidates()<br />????????self.transform_misused_divs_into_paragraphs()<br />????????candidates?=?self.score_paragraphs()<br /><br />????????best_candidate?=?self.select_best_candidate(candidates)<br /><br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?best_candidate:<br />????????????article?=?self.get_article(candidates,?best_candidate,<br />???????????????????????????????????????html_partial=html_partial)<br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">else</span>:<br />????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?ruthless:<br />????????????????ruthless?=?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">False</span><br />????????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">continue</span><br />????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">else</span>:<br />????????????????article?=?self.html.find(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'body'</span>)<br />????????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?article?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">is</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">None</span>:<br />????????????????????article?=?self.html<br />????????cleaned_article?=?self.sanitize(article,?candidates)<br />????????article_length?=?len(cleaned_article?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">or</span>?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">''</span>)<br />????????retry_length?=?self.retry_length<br />????????of_acceptable_length?=?article_length?>=?retry_length<br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?ruthless?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">and</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">not</span>?of_acceptable_length:<br />????????????ruthless?=?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">False</span><br />????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">continue</span><br />????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">else</span>:<br />????????????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">return</span>?cleaned_article<br /></code></pre><p style="font-size:inherit;color:inherit;">這里我刪除了一些冗余的調(diào)試的代碼,只保留了核心的代碼,其核心實(shí)現(xiàn)就是先去除一些干擾內(nèi)容,然后找出一些疑似正文的 candidates,然后再去尋找最佳匹配的 candidates 最后提取其內(nèi)容返回即可。</p><p style="font-size:inherit;color:inherit;">然后再找到獲取 candidates 方法里面的 score_paragraphs 方法,又追蹤到一個(gè) score_node 方法,就是為每一個(gè)節(jié)點(diǎn)打分的,其實(shí)現(xiàn)如下:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-function" style="font-size:inherit;color:rgb(248,35,117);"><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;">def</span>?<span id="go7utgvlrp" class="hljs-title" style="font-size:inherit;color:rgb(165,218,45);">score_node</span><span id="go7utgvlrp" class="hljs-params" style="font-size:inherit;color:rgb(255,152,35);">(self,?elem)</span>:</span><br />????content_score?=?self.class_weight(elem)<br />????name?=?elem.tag.lower()<br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">if</span>?name?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"div"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"article"</span>]:<br />????????content_score?+=?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">5</span><br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">elif</span>?name?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"pre"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"td"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"blockquote"</span>]:<br />????????content_score?+=?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">3</span><br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">elif</span>?name?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"address"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"ol"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"ul"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"dl"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"dd"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"dt"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"li"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"form"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"aside"</span>]:<br />????????content_score?-=?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">3</span><br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">elif</span>?name?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h1"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h2"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h3"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h4"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h5"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"h6"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"th"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"header"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"footer"</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">"nav"</span>]:<br />????????content_score?-=?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">5</span><br />????<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">return</span>?{<br />????????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'content_score'</span>:?content_score,<br />????????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'elem'</span>:?elem<br />????}<br /></code></pre><p style="font-size:inherit;color:inherit;">這什么意思呢?你看如果這個(gè)節(jié)點(diǎn)標(biāo)簽是 div 或者 article 等可能表征正文區(qū)塊的話,就加 5 分,如果是 aside 等表示側(cè)欄的內(nèi)容就減 3 分。這些打分也沒有什么非常標(biāo)準(zhǔn)的依據(jù),可能是根據(jù)經(jīng)驗(yàn)累積的規(guī)則。</p><p style="font-size:inherit;color:inherit;">另外還有一些方法里面引用了一些正則匹配來(lái)進(jìn)行打分或者替換,其定義如下:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);">REGEXES?=?{<br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'unlikelyCandidatesRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'combx|comment|community|disqus|extra|foot|header|menu|remark|rss|shoutbox|sidebar|sponsor|ad-break|agegate|pagination|pager|popup|tweet|twitter'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'okMaybeItsACandidateRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'and|article|body|column|main|shadow'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'positiveRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'article|body|content|entry|hentry|main|page|pagination|post|text|blog|story'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'negativeRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|shoutbox|sidebar|sponsor|shopping|tags|tool|widget'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'divToPElementsRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'<(a|blockquote|dl|div|img|ol|p|pre|table|ul)'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#'replaceBrsRe':?re.compile('(<br[^>]*>[?\n\r\t]*){2,}',re.I),</span><br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#'replaceFontsRe':?re.compile('<(\/?)font[^>]*>',re.I),</span><br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#'trimRe':?re.compile('^\s+|\s+$/'),</span><br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#'normalizeRe':?re.compile('\s{2,}/'),</span><br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#'killBreaksRe':?re.compile('(<br\s*\/?>(\s| ?)*){1,}/'),</span><br />????<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'videoRe'</span>:?re.compile(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'https?:\/\/(www\.)?(youtube|vimeo)\.com'</span>,?re.I),<br />????<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#skipFootnoteLink:??????/^\s*(\[?[a-z0-9]{1,2}\]?|^|edit|citation?needed)\s*$/i,</span><br />}<br /></code></pre><p style="font-size:inherit;color:inherit;">比如這里定義了 unlikelyCandidatesRe,就是不像 candidates 的 pattern,比如 foot、comment 等等,碰到這樣的標(biāo)簽或 pattern 的話,在計(jì)算分?jǐn)?shù)的時(shí)候都會(huì)減分,另外還有其他的 positiveRe、negativeRe 也是一樣的原理,分別對(duì)匹配到的內(nèi)容進(jìn)行加分或者減分。</p><p style="font-size:inherit;color:inherit;">這就是 Readability 的原理,是基于一些規(guī)則匹配的打分模型,很多規(guī)則其實(shí)來(lái)源于經(jīng)驗(yàn)的累積,分?jǐn)?shù)的計(jì)算規(guī)則應(yīng)該也是不斷地調(diào)優(yōu)得出來(lái)的。</p><p style="font-size:inherit;color:inherit;">另外其他的就沒了,Readability 并沒有提供提取時(shí)間、作者的方法,另外此種方法的準(zhǔn)確率也是有限的,但多少還是省去了一些人工成本。</p><h2 style="color:inherit;font-weight:bold;font-size:1.4em;"><span style="font-size:inherit;color:inherit;">Newspaper</span></h2><p style="font-size:inherit;color:inherit;">另外還有一個(gè)智能解析的庫(kù),叫做 Newspaper,提供的功能更強(qiáng)一些,但是準(zhǔn)確率上個(gè)人感覺和 Readability 差不太多。</p><p style="font-size:inherit;color:inherit;">這個(gè)庫(kù)分為 Python2 和 Python3 兩個(gè)版本,Python2 下的版本叫做 newspaper,Python3 下的版本叫做 newspaper3k,這里我們使用 Python3 版本來(lái)進(jìn)行測(cè)試。</p><p style="font-size:inherit;color:inherit;">其 GitHub 地址是:https://github.com/codelucas/newspaper,官方文檔地址是:https://newspaper.readthedocs.io。</p><p style="font-size:inherit;color:inherit;">在安裝之前需要安裝一些依賴庫(kù),可以參考官方的說(shuō)明:https://github.com/codelucas/newspaper#get-it-now。</p><p style="font-size:inherit;color:inherit;">安裝好必要的依賴庫(kù)之后,就可以使用 pip 安裝了:</p><pre style="font-size:inherit;color:inherit;"><code class="hljs nginx" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-attribute" style="font-size:inherit;color:rgb(238,220,112);">pip3</span>?install?newspaper3k<br /></code></pre><p style="font-size:inherit;color:inherit;">安裝成功之后便可以導(dǎo)入使用了。</p><p style="font-size:inherit;color:inherit;">下面我們先用官方提供的實(shí)例來(lái)過(guò)一遍它的用法,官方提供的示例是使用了這個(gè)鏈接:https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/,其頁(yè)面截圖如下:</p><img src="https://filescdn.proginn.com/43918d2b3087a6fab418a091997d624c/08b5866adf53951af7455d1fb9bc5f81.webp" style="font-size:inherit;color:inherit;" alt="08b5866adf53951af7455d1fb9bc5f81.webp" />官方示例<p style="font-size:inherit;color:inherit;">下面用一個(gè)實(shí)例來(lái)感受一下:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">from</span>?newspaper?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">import</span>?Article<br /><br />url?=?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'</span><br />article?=?Article(url)<br />article.download()<br /><span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#?print('html:',?article.html)</span><br /><br />article.parse()<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'authors:'</span>,?article.authors)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'date:'</span>,?article.publish_date)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'text:'</span>,?article.text)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'top?image:'</span>,?article.top_image)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'movies:'</span>,?article.movies)<br /><br />article.nlp()<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'keywords:'</span>,?article.keywords)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'summary:'</span>,?article.summary)<br /></code></pre><p style="font-size:inherit;color:inherit;">這里從 newspaper 庫(kù)里面先導(dǎo)入了 Article 這個(gè)類,然后直接傳入 url 即可,首先需要調(diào)用它的 download 方法,將網(wǎng)頁(yè)爬取下來(lái),否則直接進(jìn)行解析會(huì)拋出錯(cuò)誤的。</p><blockquote style="font-size:.9em;color:rgb(129,145,152);"><p style="font-size:inherit;color:inherit;">但我總感覺這個(gè)設(shè)計(jì)挺不友好的,parse 方法不能判斷下,如果沒執(zhí)行 download 就自動(dòng)執(zhí)行 download 方法嗎?如果不 download 其他的不什么都干不了嗎?</p></blockquote><p style="font-size:inherit;color:inherit;">好的,然后我們?cè)賵?zhí)行 parse 方法進(jìn)行網(wǎng)頁(yè)的智能解析,這個(gè)功能就比較全了,能解析 authors、publish_date、text 等等,除了正文還能解析作者、發(fā)布時(shí)間等等。</p><p style="font-size:inherit;color:inherit;">另外這個(gè)庫(kù)還提供了一些 NLP 的方法,比如獲取關(guān)鍵詞、獲取文本摘要等等,在使用前需要先執(zhí)行以下 nlp 方法。</p><p style="font-size:inherit;color:inherit;">最后運(yùn)行結(jié)果如下:</p><pre style="font-size:inherit;color:inherit;"><code class="hljs delphi" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);">authors:?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'Cnn?Wire'</span>]<br />date:?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">2013</span>-<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">12</span>-<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">30</span>?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">00</span>:<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">00</span>:<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">00</span><br />text:?By?Leigh?Ann?Caldwell<br /><br />WASHINGTON?(CNN)?—?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">Not</span>?everyone?subscribes?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?a?New?Year’s?resolution,?but?Americans?will?be?required?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?follow?new?laws?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">2014</span>.<br /><br />Some?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">40</span>,<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">000</span>?measures?taking?effect?range?from?sweeping,?national?mandates?under?Obamacare?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?marijuana?legalization?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?Colorado,?drone?prohibition?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?Illinois?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">and</span>?transgender?protections?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?California.<br /><br />Although?many?new?laws?are?controversial,?they?made?it?through?legislatures,?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">public</span>?referendum?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">or</span>?city?councils?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">and</span>?represent?the?shifting?composition?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">of</span>?American?beliefs.<br />...<br />...<br />Colorado:?Marijuana?becomes?legal?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?the?state?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?buyers?over?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">21</span>?at?a?licensed?retail?dispensary.<br /><br />(Sourcing:?much?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">of</span>?this?list?was?obtained?from?the?National?Conference?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">of</span>?State?Legislatures).<br />top?image:?https:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//localtvkstu.files.wordpress.com/2012/04/national-news-e1486938949489.jpg?quality=85&strip=all</span><br />movies:?[]<br />keywords:?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'drones'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'national'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'guns'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'wage'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'law'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'pot'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'leave'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'family'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'states'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'state'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'latest'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'obamacare'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'minimum'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'laws'</span>]<br />summary:?Oregon:?Family?leave?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?Oregon?has?been?expanded?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?allow?eligible?employees?two?weeks?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">of</span>?paid?leave?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?handle?the?death?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">of</span>?a?family?member.<br />Arkansas:?The?state?becomes?the?latest?state?requiring?voters?show?a?picture?ID?at?the?voting?booth.<br />Minimum?wage?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">and</span>?former?felon?employmentWorkers?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">13</span>?states?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">and</span>?four?cities?will?see?increases?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?the?minimum?wage.<br />New?Jersey?residents?voted?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">raise</span>?the?state’s?minimum?wage?by?$<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">1</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?$<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">8.25</span>?per?hour.<br />California?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">is</span>?also?raising?its?minimum?wage?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?$<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">9</span>?per?hour,?but?workers?must?wait?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">until</span>?July?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">to</span>?see?the?addition.<br /></code></pre><p style="font-size:inherit;color:inherit;">這里省略了一些輸出結(jié)果。</p><p style="font-size:inherit;color:inherit;">可以看到作者、日期、正文、關(guān)鍵詞、標(biāo)簽、縮略圖等信息都被打印出來(lái)了,還算是不錯(cuò)的。</p><p style="font-size:inherit;color:inherit;">但這個(gè)畢竟是官方的實(shí)例,肯定是好的,我們?cè)贉y(cè)試一下剛才的例子,看看效果如何,網(wǎng)址還是:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,改寫代碼如下:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">from</span>?newspaper?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">import</span>?Article<br /><br />url?=?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html'</span><br />article?=?Article(url,?language=<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'zh'</span>)<br />article.download()<br /><span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">#?print('html:',?article.html)</span><br /><br />article.parse()<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'authors:'</span>,?article.authors)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'title:'</span>,?article.title)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'date:'</span>,?article.publish_date)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'text:'</span>,?article.text)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'top?image:'</span>,?article.top_image)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'movies:'</span>,?article.movies)<br /><br />article.nlp()<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'keywords:'</span>,?article.keywords)<br />print(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'summary:'</span>,?article.summary)<br /></code></pre><p style="font-size:inherit;color:inherit;">這里我們將鏈接換成了新聞的鏈接,另外在 Article 初始化的時(shí)候還加了一個(gè)參數(shù) language,其值為 zh,代表中文。</p><p style="font-size:inherit;color:inherit;">然后我們看下運(yùn)行結(jié)果:</p><pre style="font-size:inherit;color:inherit;"><code class="hljs sql" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);">Building?prefix?dict?from?/usr/local/lib/python3.7/site-packages/jieba/dict.txt?...<br />Dumping?model?to?file?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">cache</span>?/<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">var</span>/folders/<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">1</span>g/l2xlw12x6rncs2p9kh5swpmw0000gn/T/jieba.cache<br />Loading?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">model</span>?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">cost</span>?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">1.7178938388824463</span>?seconds.<br />Prefix?dict?has?been?built?succesfully.<br /><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">authors</span>:?[]<br />title:?今年iPhone只有小改進(jìn)?分析師:還有其他亮點(diǎn)<br /><span id="go7utgvlrp" class="hljs-built_in" style="font-size:inherit;color:rgb(248,35,117);">date</span>:?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">2019</span><span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">-09</span><span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">-09</span>?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">08</span>:<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">10</span>:<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">26</span>+<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">08</span>:<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">00</span><br /><span id="go7utgvlrp" class="hljs-built_in" style="font-size:inherit;color:rgb(248,35,117);">text</span>:?(原標(biāo)題:Apple Bets More Cameras Can <span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">Keep</span>?iPhone?Humming)<br /><br />圖示:蘋果首席執(zhí)行官蒂姆·庫(kù)克(Tim Cook)在<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">6</span>月份舉行的蘋果全球開發(fā)者大會(huì)上。<br /><br />網(wǎng)易科技訊?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">9</span>月<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">9</span>日消息,據(jù)國(guó)外媒體報(bào)道,和過(guò)去的<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">12</span>個(gè)年頭一樣,新款iPhone將成為蘋果公司本周所舉行年度宣傳活動(dòng)的主角。但人們的注意力正轉(zhuǎn)向需要推動(dòng)增長(zhǎng)的其他蘋果產(chǎn)品和服務(wù)。<br />...<br />...<br />Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設(shè)備和服務(wù)的結(jié)合將是蘋果業(yè)務(wù)超越iPhone的關(guān)鍵。他說(shuō),上一家手機(jī)巨頭諾基亞公司在試圖進(jìn)行類似業(yè)務(wù)轉(zhuǎn)型時(shí)就陷入了困境之中。(辰辰)<br /><br />相關(guān)報(bào)道:<br /><br />iPhone?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">11</span>背部蘋果Logo改為居中:為反向無(wú)線充電<br /><br /><span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">2019</span>年新iPhone傳言匯總,你覺得哪些能成真<br />top?image:?https://www<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">.163</span>.com/favicon.ico<br />movies:?[]<br />keywords:?[<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'trust高級(jí)投資組合經(jīng)理丹摩根dan'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'iphone'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'mawston表示可穿戴設(shè)備和服務(wù)的結(jié)合將是蘋果業(yè)務(wù)超越iphone的關(guān)鍵他說(shuō)上一家手機(jī)巨頭諾基亞公司在試圖進(jìn)行類似業(yè)務(wù)轉(zhuǎn)型時(shí)就陷入了困境之中辰辰相關(guān)報(bào)道iphone'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'xs的銷售疲軟狀況迫使蘋果在1月份下調(diào)了業(yè)績(jī)預(yù)期這是逾15年來(lái)的第一次據(jù)貿(mào)易公司susquehanna'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'xs機(jī)型發(fā)布后那種令人失望的業(yè)績(jī)重演iphone'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'今年iphone只有小改進(jìn)分析師還有其他亮點(diǎn)'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'more'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'xr和iphone'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'morgan說(shuō)他們現(xiàn)在沒有任何真正深入的進(jìn)展只是想繼續(xù)讓iphone這款業(yè)務(wù)繼續(xù)轉(zhuǎn)下去他樂觀地認(rèn)為今年發(fā)布的新款手機(jī)將有足夠多的新功能為一個(gè)非常成熟的產(chǎn)品增加額外的功能讓火車?yán)^續(xù)前進(jìn)這種僅限于此的態(tài)度說(shuō)明了蘋果自2007年發(fā)布首款iphone以來(lái)所面臨的挑戰(zhàn)iphone銷售占蘋果公司總營(yíng)收的一半以上這讓蘋果陷入了一個(gè)尷尬的境地既要維持核心產(chǎn)品的銷量另一方面又需要減少對(duì)它的依賴瑞銀ubs今年5月份對(duì)8000名智能手機(jī)用戶進(jìn)行了相關(guān)調(diào)查其發(fā)布的年度全球調(diào)查報(bào)告顯示最近iphone在人臉識(shí)別技術(shù)等方面的進(jìn)步并沒有引起一些消費(fèi)者的共鳴他們基本上都認(rèn)為蘋果產(chǎn)品沒有過(guò)去幾年那么獨(dú)特或者驚艷品牌也沒有過(guò)去幾年那么有吸引力很多人使用老款手機(jī)的時(shí)間更長(zhǎng)自己認(rèn)為也沒有必要升級(jí)到平均售價(jià)949美元的新款iphone蘋果需要在明年銷售足夠多的iphone以避免像去年9月份iphone'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'keep'</span>,?<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'原標(biāo)題apple'</span>]<br />summary:?(原標(biāo)題:Apple Bets More Cameras Can <span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">Keep</span>?iPhone Humming)圖示:蘋果首席執(zhí)行官蒂姆·庫(kù)克(Tim Cook)在<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">6</span>月份舉行的蘋果全球開發(fā)者大會(huì)上。網(wǎng)易科技訊?<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">9</span>月<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">9</span>日消息,據(jù)國(guó)外媒體報(bào)道,和過(guò)去的<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">12</span>個(gè)年頭一樣,新款iPhone將成為蘋果公司本周所舉行...亞公司在試圖進(jìn)行類似業(yè)務(wù)轉(zhuǎn)型時(shí)就陷入了困境之中。(辰辰)相關(guān)報(bào)道:iPhone <span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">11</span>背部蘋果Logo改為居中:為反向無(wú)線充電<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">2019</span>年新iPhone傳言匯總,你覺得哪些能成真<br /></code></pre><p style="font-size:inherit;color:inherit;">中間正文很長(zhǎng)省略了一部分,可以看到運(yùn)行時(shí)首先加載了一些中文的庫(kù)包,比如 jieba 所依賴的詞表等等。</p><p style="font-size:inherit;color:inherit;">解析結(jié)果中,日期的確是解析對(duì)了,因?yàn)檫@個(gè)日期格式的的確比較規(guī)整,但這里還自動(dòng)給我們加了東八區(qū)的時(shí)區(qū),貼心了。作者沒有提取出來(lái),可能是沒匹配到 <code style="font-size:inherit;color:rgb(233,105,0);">來(lái)源</code> 兩個(gè)字吧,或者詞庫(kù)里面沒有,標(biāo)題、正文的提取還算比較正確,也或許這個(gè)案例的確是比較簡(jiǎn)單。</p><p style="font-size:inherit;color:inherit;">另外對(duì)于 NLP 部分,獲取的關(guān)鍵詞比較迷,長(zhǎng)度有點(diǎn)太長(zhǎng)了。summary 也有點(diǎn)冗余。</p><p style="font-size:inherit;color:inherit;">另外 Newspaper 還提供了一個(gè)較為強(qiáng)大的功能,就是 build 構(gòu)建信息源。官方的介紹其功能就是構(gòu)建一個(gè)新聞源,可以根據(jù)傳入的 URL 來(lái)提取相關(guān)文章、分類、RSS 訂閱信息等等。</p><p style="font-size:inherit;color:inherit;">我們用實(shí)例感受一下:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);"><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">import</span>?newspaper<br /><br />source?=?newspaper.build(<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'http://www.sina.com.cn/'</span>,?language=<span id="go7utgvlrp" class="hljs-string" style="font-size:inherit;color:rgb(238,220,112);">'zh'</span>)<br /><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?category?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?source.category_urls():<br />????print(category)<br /><br /><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?article?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?source.articles:<br />????print(article.url)<br />????print(article.title)<br /><br /><span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">for</span>?feed_url?<span id="go7utgvlrp" class="hljs-keyword" style="font-size:inherit;color:rgb(248,35,117);">in</span>?source.feed_urls():<br />????print(feed_url)<br /></code></pre><p style="font-size:inherit;color:inherit;">在這里我們傳入了新浪的官網(wǎng),調(diào)用了 build 方法,構(gòu)建了一個(gè) source,然后輸出了相關(guān)的分類、文章、RSS 訂閱等內(nèi)容,運(yùn)行結(jié)果如下:</p><pre style="font-size:inherit;color:inherit;"><code class="hljs cpp" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);">http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//cul.news.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//www.sina.com.cn/</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//sc.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//jiangsu.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//gif.sina.com.cn</span><br />....<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//tj.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//jiaoyi.sina.com.cn</span><br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//cul.sina.com.cn</span><br />https:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//finance.sina.com.cn/roll/2019-06-12/doc-ihvhiqay5022316.shtml?</span><br />經(jīng)參頭版:激發(fā)微觀主體活力加速國(guó)企改革<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//eladies.sina.com.cn/feel/xinli/2018-01-25/0722/doc-ifyqwiqk0463751.shtml?</span><br />我們別再聯(lián)系了<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//finance.sina.com.cn/roll/2018-05-13/doc-ihamfahx2958233.shtml?</span><br />新違約時(shí)代到來(lái)!違約“常態(tài)化”下的市場(chǎng)出清與換血<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//sports.sina.com.cn/basketball/2019worldcup/2019-09-08/doc-iicezzrq4390554.shtml?</span><br />羅健兒<span id="go7utgvlrp" class="hljs-number" style="font-size:inherit;color:rgb(174,135,250);">26</span>分韓國(guó)收首勝<br />...<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn/outbound/pages/2019-09-05/detail-iicezzrq3622449.shtml?</span><br />菲律賓海濱大道?夜晚讓人迷離<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn/outbound/pages/2016-08-19/detail-ifxvcnrv0334779.shtml??</span><br />關(guān)島?用雙腳盡情享受陽(yáng)光與海灘<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn/domestic/pages/2019-09-04/detail-iicezzrq3325092.shtml?</span><br />秋行查干浩特草原<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn/outbound/pages/2019-09-03/detail-iicezueu3050710.shtml?</span><br />白羊座的土豪之城迪拜<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//travel.sina.com.cn/video/baidang/2019-08-29/detail-ihytcitn2747327.shtml?</span><br />肯辛頓宮藏著維多利亞的秘密<br />http:<span id="go7utgvlrp" class="hljs-comment" style="font-size:inherit;color:rgb(128,128,128);">//cd.auto.sina.com.cn/bdcs/2017-08-15/detail-ifyixias1051586.shtml?</span><br /></code></pre><p style="font-size:inherit;color:inherit;">可以看到它輸出了非常多的類別鏈接,另外還有很多文章列表,由于沒有 RSS 訂閱內(nèi)容,這里沒有顯示。</p><p style="font-size:inherit;color:inherit;">下面把站點(diǎn)換成我的博客:https://cuiqingcai.com,博客截圖如下:</p><p style="text-align:center;"><img class="rich_pages" src="https://filescdn.proginn.com/a5997f42ee7d07da00e227c286edef0e/99e4d4278f547a0ceab037c3a5ebbcee.webp" alt="99e4d4278f547a0ceab037c3a5ebbcee.webp" /></p><p style="font-size:inherit;color:inherit;text-align:center;"><span style="color:rgb(153,153,153);font-size:.7em;text-align:center;">博客截圖</span></p><p style="font-size:inherit;color:inherit;text-align:left;">看看運(yùn)行結(jié)果:</p><pre style="font-size:inherit;color:inherit;"><code class="python language-python hljs" style="font-size:14px;font-family:Consolas, Inconsolata, Courier, monospace;color:rgb(169,183,198);">https://cuiqingcai.com<br />https://cuiqingcai.com<br /></code></pre><p style="font-size:inherit;color:inherit;">似乎不太行啊,一篇文章都沒有,RSS 也沒有,可見其功能還有待優(yōu)化。</p><p style="font-size:inherit;color:inherit;">Newspaper 的基本用法介紹到這里,更加詳細(xì)的用法可以參考官方文檔:https://newspaper.readthedocs.io。個(gè)人感覺其中的智能解析可以用用,不過(guò)據(jù)我的個(gè)人經(jīng)驗(yàn),感覺還是很多解析不對(duì)或者解析不全的,</p><p style="font-size:inherit;color:inherit;">以上便是 Readability 和 Newspaper 的介紹。</p><h2 style="color:inherit;font-weight:bold;font-size:1.4em;"><span style="font-size:inherit;color:inherit;">其他方案</span></h2><p style="font-size:inherit;color:inherit;">另外除了這兩個(gè)庫(kù)其實(shí)還有一些比較優(yōu)秀的算法,由于我們處理的大多為中文文檔,所以一些在中文上面的研究是比較有效的,在這里列幾個(gè)值得借鑒的中文論文供大家參考:</p><ul class="list-paddingleft-2"><li><p><span style="font-size:inherit;color:inherit;">洪鴻輝等,基于文本及符號(hào)密度的網(wǎng)頁(yè)正文提取方法</span></p></li><li><p><span style="font-size:inherit;color:inherit;">梁東等,基于支持向量機(jī)的網(wǎng)頁(yè)正文內(nèi)容提取方法</span></p></li><li><p><span style="font-size:inherit;color:inherit;">王衛(wèi)紅等,基于可視塊的多記錄型復(fù)雜網(wǎng)頁(yè)信息提取算法</span></p></li></ul><p style="font-size:inherit;color:inherit;">今天還看到一位大佬「青南」根據(jù)上面第一篇論文所實(shí)現(xiàn)的 GeneralNewsExtractor,GitHub 地址為:https://github.com/kingname/GeneralNewsExtractor,經(jīng)測(cè)試準(zhǔn)確率還不錯(cuò),比 Readability 和 Newspaper 的解析效果要好。我也跟作者進(jìn)行了交流,后續(xù)可能還會(huì)基于其他的 Feature 或依賴于視覺化的方法進(jìn)行優(yōu)化,大家可以關(guān)注下,謝謝!</p><p><strong>崔慶才</strong></p><p><span style="font-size:12px;">靜覓博客博主,</span><span style="font-size:12px;">《Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)》作者</span></p><p><span style="font-size:10px;">隱形字</span></p><p><span style="font-size:12px;">個(gè)人公眾號(hào):進(jìn)擊的Coder</span></p><img src="https://filescdn.proginn.com/8f2ef2984cf3580628f3eeb37fd8bca0/b4f71f7c41519fcf04274288487d202c.webp" alt="b4f71f7c41519fcf04274288487d202c.webp" /><img src="https://filescdn.proginn.com/3b94682d3e1cefc1e159d883b0320669/72042c2afedbe564d7443a90e39ca726.webp" alt="72042c2afedbe564d7443a90e39ca726.webp" /><p>長(zhǎng)按識(shí)別二維碼關(guān)注</p><p style="font-size:15px;font-family:Avenir, '-apple-system-font', '微軟雅黑', sans-serif;color:rgb(74,74,74);text-align:left;"><br /></p><span style="color:rgb(0,0,0);">好文和朋友一起看~</span></div></div><div id="go7utgvlrp" class="tag-list-box"><div id="go7utgvlrp" class="tag-list"><div id="go7utgvlrp" class="tag-list-container"></div></div></div><span id="go7utgvlrp" class="view_num">瀏覽 1</span><div id="go7utgvlrp" class="float-bar float-bar-relative" id="float-bar-relative"><div id="go7utgvlrp" class="float-bar-body"><div id="go7utgvlrp" class="item qinglite-zan"><i class="iconfont icon-aixin"></i>點(diǎn)贊 </div><div id="go7utgvlrp" class="gap"></div><a href="#comments" class="item"><i class="iconfont iconfont icon-pinglun1"></i><span id="go7utgvlrp" class="com_num"></span>評(píng)論 </a><div id="go7utgvlrp" class="item qinglite-collect"><i class="iconfont icon-shoucang"></i>收藏 </div><div id="go7utgvlrp" class="item qinglite_share"><i class="iconfont icon-fenxiang1"></i>分享 <div id="go7utgvlrp" class="qrcode-modal"><img src="/api/pub/ewm" alt=""><p>手機(jī)掃一掃分享</p></div></div><div id="go7utgvlrp" class="expand"></div><a onclick="miniProgram_navigateTo_func()" class="item qinglite_share_miniapp miniapp_show"><i class="iconfont icon-fenxiang1"></i>分享 </a><div id="go7utgvlrp" class="item jubao qinglite-jubao miniapp_hide"><i class="iconfont icon-jubao"></i> 舉報(bào) </div></div></div></div><div id="go7utgvlrp" class="comments_wrapper comments app_hide"><div id="go7utgvlrp" class="title">評(píng)論</div><div class="go7utgvlrp" id="comments" class="comments"><div id="go7utgvlrp" class="error"></div><div id="go7utgvlrp" class="textarea-wrapper"><textarea class="comment-content" cols="30" rows="5" placeholder="善語(yǔ)結(jié)善緣,惡言傷人心"></textarea></div><div id="go7utgvlrp" class="button"><div id="go7utgvlrp" class="error"><div id="go7utgvlrp" class="comment-emojis"><div id="go7utgvlrp" class="comment-choose-img qinglite_upload"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-tupianyangshi2"></use></svg><span>圖片</span></div><div id="go7utgvlrp" class="comment-choose-img comment-emoji-btn"><svg class="icon show-emoji-list" aria-hidden="true"><use xlink:href="#icon-biaoqing"></use></svg><span id="go7utgvlrp" class="show-emoji-list">表情</span><div id="go7utgvlrp" class="comment-emoji-list"></div></div><div style="display: none" class="comment-choose-img"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-shipinwenjian1"></use></svg><span>視頻</span></div></div></div><button class="qinglite-comment">評(píng)價(jià)</button></div><div id="go7utgvlrp" class="medias qinglite_upload_content"></div></div></div><div style="display: none" class="comments app_hide"><div id="go7utgvlrp" class="title">全部評(píng)論</div><div id="go7utgvlrp" class="comments comment-item-content"></div></div><div class="go7utgvlrp" id="recommend" class="comments hide_app"><div id="go7utgvlrp" class="title">推薦 <a href="#qs_detail" class="iconfont icon-huidaodingbu"></a></div></div><div id="go7utgvlrp" class="qs_post_list flow_post_list flow_post_list_recommend hide_app"><div id="go7utgvlrp" class="item img qinglite_item"><a href="http://www.weimomishe.com/doc/88126475f5c171537" title="細(xì)說(shuō)SpringAOP的核心用法和原理解析" class="content"><div id="go7utgvlrp" class="bg" style="background-image:url(https://filescdn.proginn.com/50c0ead46502f29c3449d61bfbffeb61/f76a1d13667212cae7d79ddbeaf74388.webp?x-oss-process=image/resize,w_300)"></div></a><a href="http://www.weimomishe.com/doc/88126475f5c171537" title="細(xì)說(shuō)SpringAOP的核心用法和原理解析" class="title_middle">細(xì)說(shuō)SpringAOP的核心用法和原理解析</a><a href="http://www.weimomishe.com/u/6585647577445a29e" title="Java技術(shù)迷" class="up_info"><div style="background-image:url(https://inn.proginn.com/useralbum/575827/cps_wx_01788d3de241.jpg!mediumicon?imageMogr2/format/webp/thumbnail/!200x200r)" class="avatar"></div><div id="go7utgvlrp" class="username">Java技術(shù)迷</div><div id="go7utgvlrp" class="expand"></div><div id="go7utgvlrp" class="likes"><i class="iconfont icon-aixin"></i></div><span id="go7utgvlrp" class="num">0</span></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/doc/f0057028650c7024652b9" title="readability" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">readability</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">ReadabilityReadability is a tool for extracting an</div></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/pedia/f0056515650c7023439ed" title="readability" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">readability</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">ReadabilityReadabilityisatoolforextractingandcuratingtheprimaryreadablecontentofawebpage.CheckoutThe</div></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/pedia/f0057338651506de96e3b" title="J-TMXTMX 解析和渲染庫(kù)" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">J-TMXTMX 解析和渲染庫(kù)</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">J-TMX是一個(gè)用來(lái)解析和渲染TMX(TranslationMemoryeXchange)文件的Java庫(kù)。使用JavaSAX解析器來(lái)解析TMX。示例代碼://Create?New?Map?Insta</div></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/doc/f0056422651506df9605c" title="J-TMXTMX 解析和渲染庫(kù)" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">J-TMXTMX 解析和渲染庫(kù)</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">J-TMX 是一個(gè)用來(lái)解析和渲染 TMX (Translation Memory eXchange)</div></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/doc/f0055465650c61b4cf68e" title="SGMLReaderHTML 和 SGML 解析庫(kù)" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">SGMLReaderHTML 和 SGML 解析庫(kù)</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">SgmlReader 是一個(gè)敏捷的 C# .NET 庫(kù),通過(guò) XmlReader API 解析 HT</div></a></div><div id="go7utgvlrp" class="item qinglite_item qinglite_item_news"><a href="http://www.weimomishe.com/pedia/f0051081650c61b3a6e12" title="SGMLReaderHTML 和 SGML 解析庫(kù)" class="content"><div id="go7utgvlrp" class="qinglite_item_top_wrapper"><div id="go7utgvlrp" class="title">SGMLReaderHTML 和 SGML 解析庫(kù)</div><div id="go7utgvlrp" class="right-top-icon-tag"></div></div><div id="go7utgvlrp" class="desc">SgmlReader是一個(gè)敏捷的C#.NET庫(kù),通過(guò)XmlReaderAPI解析HTML和SGML文件。同時(shí)提供一個(gè)命令行工具可以對(duì)這些內(nèi)容進(jìn)行格式化輸出到XML結(jié)果。示例代碼:XmlDocument</div></a></div><div id="go7utgvlrp" class="item img qinglite_item"><a href="http://www.weimomishe.com/doc/77546474d2df061ec" title="Python解析庫(kù)lxml與xpath用法總結(jié)" class="content"><div id="go7utgvlrp" class="bg" style="background-image:url(https://filescdn.proginn.com/bbca7ffa2ddf02caba8c908ae7196571/074a8b8e48598bcffaa5dfc3db6f25b9.webp?x-oss-process=image/resize,w_300)"></div></a><a href="http://www.weimomishe.com/doc/77546474d2df061ec" title="Python解析庫(kù)lxml與xpath用法總結(jié)" class="title_middle">Python解析庫(kù)lxml與xpath用法總結(jié)</a><a href="http://www.weimomishe.com/u/4709646ef83610820" title="IT共享之家" class="up_info"><div style="background-image:url(https://inn.proginn.com/useralbum/522178/cps_wx_017660a47959.jpg!mediumicon?imageMogr2/format/webp/thumbnail/!200x200r)" class="avatar"></div><div id="go7utgvlrp" class="username">IT共享之家</div><div id="go7utgvlrp" class="expand"></div><div id="go7utgvlrp" class="likes"><i class="iconfont icon-aixin"></i></div><span id="go7utgvlrp" class="num">0</span></a></div><div id="go7utgvlrp" class="item img qinglite_item"><a href="http://www.weimomishe.com/doc/326264757c2924239" title="Python解析庫(kù)lxml與xpath用法總結(jié)" class="content"><div id="go7utgvlrp" class="bg" style="background-image:url(https://filescdn.proginn.com/446712090f1edadfe8b5721b19dd347a/738fef3a0b3cefa00375328d3c45457a.webp?x-oss-process=image/resize,w_300)"></div></a><a href="http://www.weimomishe.com/doc/326264757c2924239" title="Python解析庫(kù)lxml與xpath用法總結(jié)" class="title_middle">Python解析庫(kù)lxml與xpath用法總結(jié)</a><a href="http://www.weimomishe.com/u/4917646d3cc66077f" title="Python爬蟲與數(shù)據(jù)挖掘" class="up_info"><div style="background-image:url(https://inn.proginn.com/useralbum/519930/cps_wx_017617091c69.jpg!mediumicon?imageMogr2/format/webp/thumbnail/!200x200r)" class="avatar"></div><div id="go7utgvlrp" class="username">Python爬蟲與數(shù)據(jù)挖掘</div><div id="go7utgvlrp" class="expand"></div><div id="go7utgvlrp" class="likes"><i class="iconfont icon-aixin"></i></div><span id="go7utgvlrp" class="num">0</span></a></div><div id="go7utgvlrp" class="item img qinglite_item"><a href="http://www.weimomishe.com/pedia/f122xei800851710015993" title="The Newspaper" class="content"><div id="go7utgvlrp" class="bg" style="background-image:url(https://qinglite-1253448069.cos.ap-shanghai.myqcloud.com/web/6c25dba6e39d96b9ecaef6ca28e0620a9759ae11?imageMogr2/format/webp/thumbnail/!600x600r)"></div></a><a href="http://www.weimomishe.com/pedia/f122xei800851710015993" title="The Newspaper" class="title_middle">The Newspaper</a><a href="http://www.weimomishe.com/pedia/f122xei800851710015993" title="The Newspaper" class="up_info"><div style="background-image:url(https://qinglite-1253448069.cos.ap-shanghai.myqcloud.com/web/6c25dba6e39d96b9ecaef6ca28e0620a9759ae11?imageMogr2/format/webp/thumbnail/!200x200r)" class="avatar"></div><div id="go7utgvlrp" class="username">The Newspaper</div><div id="go7utgvlrp" class="expand"></div><div id="go7utgvlrp" class="likes"><i class="iconfont icon-aixin"></i></div><span id="go7utgvlrp" class="num">0</span></a></div><i></i><i></i><i></i><i></i><i></i></div><div id="go7utgvlrp" class="float-bar" id="float-bar"><div id="go7utgvlrp" class="float-bar-body"><div id="go7utgvlrp" class="item qinglite-zan"><i class="iconfont icon-aixin"></i>點(diǎn)贊 </div><div id="go7utgvlrp" class="gap"></div><a href="#comments" class="item"><i class="iconfont iconfont icon-pinglun1"></i><span id="go7utgvlrp" class="com_num"></span>評(píng)論 </a><div id="go7utgvlrp" class="item qinglite-collect"><i class="iconfont icon-shoucang"></i>收藏 </div><div id="go7utgvlrp" class="item qinglite_share"><i class="iconfont icon-fenxiang1"></i>分享 <div id="go7utgvlrp" class="qrcode-modal"><img src="/api/pub/ewm" alt=""><p>手機(jī)掃一掃分享</p></div></div><div id="go7utgvlrp" class="expand"></div><a onclick="miniProgram_navigateTo_func()" class="item qinglite_share_miniapp miniapp_show"><i class="iconfont icon-fenxiang1"></i>分享 </a><div id="go7utgvlrp" class="item jubao qinglite-jubao miniapp_hide"><i class="iconfont icon-jubao"></i> 舉報(bào) </div><a href="#recommend" class="item iconfont icon-huidaodingbu"></a></div></div></article></div></main><footer id="footer"><div id="go7utgvlrp" class="container"><div id="go7utgvlrp" class="links"><i class="copyright">2023?輕識(shí)</i><a href="http://www.weimomishe.com/doc/8908642f6995bc140">隱私協(xié)議</a><a href="http://www.weimomishe.com/doc/8963642f69a51e604">用戶協(xié)議</a><a href="http://www.weimomishe.com/about">關(guān)于我們</a><a href="http://www.weimomishe.com/robot" rel="nofollow" style="display: none;">機(jī)器人</a><a class="last" target="_blank" >浙ICP備19021730號(hào)-8</a><a class="last" target="_blank" >浙公網(wǎng)安備 33011002017279號(hào)</a></div></div></footer><link rel="stylesheet"><link rel="stylesheet" > <div style="position:fixed;left:-9000px;top:-9000px;"><ruby id="afajh"></ruby><form id="afajh"></form><blockquote id="afajh"></blockquote><b id="afajh"></b><blockquote id="afajh"></blockquote><ol id="afajh"><cite id="afajh"><pre id="afajh"><menuitem id="afajh"></menuitem></pre></cite></ol><samp id="afajh"><dfn id="afajh"><ins id="afajh"><tr id="afajh"></tr></ins></dfn></samp><abbr id="afajh"></abbr><dl id="afajh"></dl><th id="afajh"></th><listing id="afajh"><small id="afajh"><table id="afajh"><abbr id="afajh"></abbr></table></small></listing><s id="afajh"><var id="afajh"></var></s><tt id="afajh"><noframes id="afajh"><kbd id="afajh"><form id="afajh"></form></kbd></noframes></tt><del id="afajh"></del><thead id="afajh"></thead><i id="afajh"></i><small id="afajh"></small><meter id="afajh"></meter><tr id="afajh"></tr><track id="afajh"></track><listing id="afajh"><small id="afajh"><thead id="afajh"><sup id="afajh"></sup></thead></small></listing><del id="afajh"></del><input id="afajh"><noscript id="afajh"></noscript></input><strike id="afajh"></strike><tr id="afajh"><center id="afajh"><track id="afajh"><em id="afajh"></em></track></center></tr><del id="afajh"></del><u id="afajh"></u><source id="afajh"><cite id="afajh"><legend id="afajh"><label id="afajh"></label></legend></cite></source><bdo id="afajh"><noframes id="afajh"><strong id="afajh"><dl id="afajh"></dl></strong></noframes></bdo><delect id="afajh"></delect><dfn id="afajh"></dfn><pre id="afajh"></pre><label id="afajh"><code id="afajh"><center id="afajh"></center></code></label><table id="afajh"><sup id="afajh"><strong id="afajh"></strong></sup></table><dfn id="afajh"></dfn><legend id="afajh"><ol id="afajh"></ol></legend><tt id="afajh"></tt><td id="afajh"><dl id="afajh"></dl></td><nav id="afajh"><noscript id="afajh"><style id="afajh"><th id="afajh"></th></style></noscript></nav><strike id="afajh"></strike><tbody id="afajh"><rt id="afajh"><abbr id="afajh"><acronym id="afajh"></acronym></abbr></rt></tbody><acronym id="afajh"></acronym><label id="afajh"><optgroup id="afajh"></optgroup></label><acronym id="afajh"></acronym><code id="afajh"></code><delect id="afajh"><tbody id="afajh"><mark id="afajh"></mark></tbody></delect><pre id="afajh"><samp id="afajh"><b id="afajh"></b></samp></pre><progress id="afajh"><pre id="afajh"></pre></progress><div id="afajh"><sup id="afajh"></sup></div><menu id="afajh"><li id="afajh"><pre id="afajh"><nobr id="afajh"></nobr></pre></li></menu> <tbody id="afajh"><option id="afajh"></option></tbody><legend id="afajh"></legend><tfoot id="afajh"><s id="afajh"></s></tfoot><thead id="afajh"></thead><kbd id="afajh"></kbd><dd id="afajh"><dl id="afajh"><big id="afajh"><acronym id="afajh"></acronym></big></dl></dd><strong id="afajh"><video id="afajh"><tbody id="afajh"><i id="afajh"></i></tbody></video></strong><bdo id="afajh"></bdo><sup id="afajh"><td id="afajh"><tbody id="afajh"><option id="afajh"></option></tbody></td></sup><fieldset id="afajh"><nav id="afajh"><sup id="afajh"><pre id="afajh"></pre></sup></nav></fieldset><noscript id="afajh"></noscript><span id="afajh"><p id="afajh"></p></span><rt id="afajh"><strong id="afajh"></strong></rt><optgroup id="afajh"></optgroup><thead id="afajh"></thead><ol id="afajh"><pre id="afajh"></pre></ol><legend id="afajh"></legend><th id="afajh"></th><font id="afajh"></font><input id="afajh"><noscript id="afajh"><style id="afajh"></style></noscript></input><ul id="afajh"><pre id="afajh"><rp id="afajh"></rp></pre></ul><li id="afajh"></li><tt id="afajh"></tt><b id="afajh"><menuitem id="afajh"></menuitem></b><dfn id="afajh"><wbr id="afajh"><address id="afajh"></address></wbr></dfn><strike id="afajh"><object id="afajh"></object></strike><tbody id="afajh"></tbody><output id="afajh"></output><pre id="afajh"><center id="afajh"><thead id="afajh"><button id="afajh"></button></thead></center></pre><strong id="afajh"><video id="afajh"></video></strong><ol id="afajh"><pre id="afajh"></pre></ol><var id="afajh"></var><xmp id="afajh"></xmp><tfoot id="afajh"></tfoot><big id="afajh"></big><sup id="afajh"><pre id="afajh"><rt id="afajh"></rt></pre></sup><style id="afajh"></style><menu id="afajh"><tbody id="afajh"><i id="afajh"></i></tbody></menu><output id="afajh"><thead id="afajh"><button id="afajh"><blockquote id="afajh"></blockquote></button></thead></output><noframes id="afajh"><del id="afajh"><form id="afajh"></form></del></noframes><fieldset id="afajh"></fieldset><dd id="afajh"><strike id="afajh"><meter id="afajh"></meter></strike></dd><dl id="afajh"><style id="afajh"></style></dl><pre id="afajh"><legend id="afajh"></legend></pre><cite id="afajh"></cite><track id="afajh"></track><sup id="afajh"><pre id="afajh"><rt id="afajh"><bdo id="afajh"></bdo></rt></pre></sup><nav id="afajh"></nav><tt id="afajh"></tt><pre id="afajh"><legend id="afajh"></legend></pre> <bdo id="afajh"></bdo><center id="afajh"></center><form id="afajh"><strike id="afajh"><xmp id="afajh"></xmp></strike></form><tfoot id="afajh"></tfoot><pre id="afajh"><samp id="afajh"><b id="afajh"></b></samp></pre><menu id="afajh"></menu><legend id="afajh"></legend><tr id="afajh"><source id="afajh"><sub id="afajh"></sub></source></tr><form id="afajh"><ruby id="afajh"><li id="afajh"></li></ruby></form><abbr id="afajh"></abbr><th id="afajh"></th><center id="afajh"><center id="afajh"><small id="afajh"></small></center></center><div id="afajh"><th id="afajh"><tbody id="afajh"></tbody></th></div><bdo id="afajh"></bdo><ruby id="afajh"><font id="afajh"></font></ruby><th id="afajh"><tt id="afajh"></tt></th><output id="afajh"></output><address id="afajh"><thead id="afajh"></thead></address><progress id="afajh"><dl id="afajh"><dfn id="afajh"></dfn></dl></progress><td id="afajh"></td><li id="afajh"><pre id="afajh"></pre></li><dl id="afajh"><menu id="afajh"></menu></dl><tbody id="afajh"><option id="afajh"><dfn id="afajh"></dfn></option></tbody><noscript id="afajh"></noscript><td id="afajh"><cite id="afajh"><legend id="afajh"></legend></cite></td><acronym id="afajh"></acronym><optgroup id="afajh"><rp id="afajh"><small id="afajh"><legend id="afajh"></legend></small></rp></optgroup><mark id="afajh"><span id="afajh"><sup id="afajh"><dd id="afajh"></dd></sup></span></mark><code id="afajh"><abbr id="afajh"><var id="afajh"><th id="afajh"></th></var></abbr></code><em id="afajh"><center id="afajh"><fieldset id="afajh"><div id="afajh"></div></fieldset></center></em><strike id="afajh"></strike><cite id="afajh"></cite><dfn id="afajh"><sub id="afajh"><legend id="afajh"></legend></sub></dfn><big id="afajh"></big><del id="afajh"><pre id="afajh"><ruby id="afajh"><sub id="afajh"></sub></ruby></pre></del><rt id="afajh"></rt><sup id="afajh"></sup><tt id="afajh"><meter id="afajh"><strong id="afajh"><form id="afajh"></form></strong></meter></tt><object id="afajh"></object><acronym id="afajh"></acronym><tr id="afajh"></tr><fieldset id="afajh"><nav id="afajh"><blockquote id="afajh"><tbody id="afajh"></tbody></blockquote></nav></fieldset><video id="afajh"><tt id="afajh"><noframes id="afajh"><dfn id="afajh"></dfn></noframes></tt></video><del id="afajh"></del><abbr id="afajh"></abbr><table id="afajh"></table><dl id="afajh"><menu id="afajh"></menu></dl><strike id="afajh"><object id="afajh"><acronym id="afajh"><i id="afajh"></i></acronym></object></strike><small id="afajh"><em id="afajh"><listing id="afajh"></listing></em></small><cite id="afajh"></cite> <progress id="afajh"><dl id="afajh"><u id="afajh"><output id="afajh"></output></u></dl></progress><sup id="afajh"><dd id="afajh"><font id="afajh"></font></dd></sup><big id="afajh"><acronym id="afajh"><dfn id="afajh"><ins id="afajh"></ins></dfn></acronym></big><p id="afajh"><strong id="afajh"></strong></p><legend id="afajh"></legend><thead id="afajh"></thead><track id="afajh"><em id="afajh"><em id="afajh"><ul id="afajh"></ul></em></em></track><cite id="afajh"></cite><nobr id="afajh"></nobr><ol id="afajh"></ol><input id="afajh"></input><ul id="afajh"><dfn id="afajh"><output id="afajh"><thead id="afajh"></thead></output></dfn></ul><option id="afajh"></option><tr id="afajh"><source id="afajh"><sub id="afajh"></sub></source></tr><strike id="afajh"></strike><wbr id="afajh"><fieldset id="afajh"><div id="afajh"></div></fieldset></wbr><li id="afajh"></li><optgroup id="afajh"></optgroup><dfn id="afajh"></dfn><dl id="afajh"><menu id="afajh"><ol id="afajh"></ol></menu></dl><address id="afajh"><thead id="afajh"><blockquote id="afajh"></blockquote></thead></address><optgroup id="afajh"></optgroup><menu id="afajh"><tbody id="afajh"><i id="afajh"></i></tbody></menu><noscript id="afajh"></noscript><big id="afajh"></big><rt id="afajh"></rt><em id="afajh"></em><object id="afajh"></object><u id="afajh"></u><ul id="afajh"><pre id="afajh"></pre></ul><strike id="afajh"><object id="afajh"><acronym id="afajh"><i id="afajh"></i></acronym></object></strike><small id="afajh"></small><source id="afajh"></source><dd id="afajh"></dd><noscript id="afajh"></noscript><center id="afajh"></center><li id="afajh"></li><sup id="afajh"></sup><kbd id="afajh"></kbd><listing id="afajh"></listing><output id="afajh"><thead id="afajh"><button id="afajh"><blockquote id="afajh"></blockquote></button></thead></output><pre id="afajh"><legend id="afajh"></legend></pre><del id="afajh"></del><style id="afajh"><listing id="afajh"></listing></style><pre id="afajh"><legend id="afajh"><wbr id="afajh"><thead id="afajh"></thead></wbr></legend></pre><label id="afajh"><optgroup id="afajh"></optgroup></label><tr id="afajh"></tr><delect id="afajh"><dfn id="afajh"></dfn></delect><xmp id="afajh"><th id="afajh"><progress id="afajh"></progress></th></xmp><code id="afajh"><abbr id="afajh"><var id="afajh"><th id="afajh"></th></var></abbr></code> <rt id="afajh"><bdo id="afajh"><sup id="afajh"></sup></bdo></rt><abbr id="afajh"><thead id="afajh"><th id="afajh"></th></thead></abbr><noscript id="afajh"></noscript><small id="afajh"></small><sup id="afajh"><pre id="afajh"></pre></sup><ol id="afajh"><pre id="afajh"></pre></ol><tbody id="afajh"></tbody><abbr id="afajh"></abbr><label id="afajh"><optgroup id="afajh"></optgroup></label><blockquote id="afajh"></blockquote><tt id="afajh"></tt><dd id="afajh"><strike id="afajh"><meter id="afajh"></meter></strike></dd><video id="afajh"></video><kbd id="afajh"></kbd><dd id="afajh"></dd><progress id="afajh"><pre id="afajh"></pre></progress><ruby id="afajh"></ruby><pre id="afajh"><xmp id="afajh"><b id="afajh"><abbr id="afajh"></abbr></b></xmp></pre><font id="afajh"><big id="afajh"><samp id="afajh"><dfn id="afajh"></dfn></samp></big></font><td id="afajh"><cite id="afajh"><legend id="afajh"></legend></cite></td><menuitem id="afajh"><form id="afajh"><optgroup id="afajh"><rp id="afajh"></rp></optgroup></form></menuitem><optgroup id="afajh"></optgroup><abbr id="afajh"></abbr><ol id="afajh"><label id="afajh"><s id="afajh"></s></label></ol><sup id="afajh"><acronym id="afajh"><rt id="afajh"></rt></acronym></sup><optgroup id="afajh"></optgroup><strike id="afajh"><object id="afajh"><span id="afajh"></span></object></strike><pre id="afajh"></pre><center id="afajh"></center><legend id="afajh"></legend><del id="afajh"><pre id="afajh"><ruby id="afajh"><sub id="afajh"></sub></ruby></pre></del><ul id="afajh"></ul><xmp id="afajh"><th id="afajh"><progress id="afajh"></progress></th></xmp><i id="afajh"><nobr id="afajh"></nobr></i><optgroup id="afajh"></optgroup><source id="afajh"></source><option id="afajh"></option><meter id="afajh"><tbody id="afajh"></tbody></meter><u id="afajh"><output id="afajh"></output></u><optgroup id="afajh"></optgroup><pre id="afajh"></pre><track id="afajh"><em id="afajh"><legend id="afajh"><var id="afajh"></var></legend></em></track><address id="afajh"></address><dl id="afajh"></dl><ol id="afajh"><pre id="afajh"></pre></ol><th id="afajh"></th><button id="afajh"><blockquote id="afajh"><small id="afajh"></small></blockquote></button><tr id="afajh"><source id="afajh"></source></tr><strong id="afajh"><video id="afajh"><tbody id="afajh"><option id="afajh"></option></tbody></video></strong><dfn id="afajh"></dfn></div> <a href="http://www.henanlangda.com" target="_blank">看黄在线免费观看 </a>| <a href="http://www.tjglswbl.com" target="_blank">欧美大黑逼 </a>| <a href="http://www.chibameitoku.net" target="_blank">久草视频大香蕉 </a>| <a href="http://www.xasitan.com.cn" target="_blank">高清无码一区二区三区四区 </a>| <a href="http://www.scflgg.cn" target="_blank">通野未帆一区二区三区 </a>| <script> (function(){ const currentUrl = location.href; const lastPush = localStorage.getItem('baidu_push'); const now = Date.now(); if(/\/admin|\/login|\/404/.test(currentUrl) || (lastPush && now - JSON.parse(lastPush).timestamp < 86400000)) return; const script = document.createElement('script'); script.src = location.protocol === 'https:' ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js'; script.async = true; script.onload = () => { localStorage.setItem('baidu_push', JSON.stringify({ url: currentUrl, timestamp: now })); }; document.head.appendChild(script); })(); </script> </body></html>