日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python 提取html文本的方法

瀏覽:47日期:2022-06-19 08:44:15

假設(shè)我們需要從各種網(wǎng)頁中提取全文,并且要?jiǎng)冸x所有HTML標(biāo)記。通常,默認(rèn)解決方案是使用BeautifulSoup軟件包中的get_text方法,該方法內(nèi)部使用lxml。這是一個(gè)經(jīng)過充分測試的解決方案,但是在處理成千上萬個(gè)HTML文檔時(shí)可能會(huì)非常慢。通過用selectolax替換BeautifulSoup,您幾乎可以免費(fèi)獲得5-30倍的加速!這是一個(gè)簡單的基準(zhǔn)測試,可分析commoncrawl(`處理NLP問題時(shí),有時(shí)您需要獲得大量的文本集。互聯(lián)網(wǎng)是文本的最大來源,但是不幸的是,從任意HTML頁面提取文本是一項(xiàng)艱巨而痛苦的任務(wù)。假設(shè)我們需要從各種網(wǎng)頁中提取全文,并且要?jiǎng)冸x所有HTML標(biāo)記。通常,默認(rèn)解決方案是使用BeautifulSoup軟件包中的get_text方法,該方法內(nèi)部使用lxml。這是一個(gè)經(jīng)過充分測試的解決方案,但是在處理成千上萬個(gè)HTML文檔時(shí)可能會(huì)非常慢。通過用selectolax替換BeautifulSoup,您幾乎可以免費(fèi)獲得5-30倍的加速!這是一個(gè)簡單的基準(zhǔn)測試,可分析commoncrawl(https://commoncrawl.org/)的10,000個(gè)HTML頁面:

# coding: utf-8from time import timeimport warcfrom bs4 import BeautifulSoupfrom selectolax.parser import HTMLParserdef get_text_bs(html): tree = BeautifulSoup(html, ’lxml’) body = tree.body if body is None:return None for tag in body.select(’script’):tag.decompose() for tag in body.select(’style’):tag.decompose() text = body.get_text(separator=’n’) return textdef get_text_selectolax(html): tree = HTMLParser(html) if tree.body is None:return None for tag in tree.css(’script’):tag.decompose() for tag in tree.css(’style’):tag.decompose() text = tree.body.text(separator=’n’) return textdef read_doc(record, parser=get_text_selectolax): url = record.url text = None if url:payload = record.payload.read()header, html = payload.split(b’rnrn’, maxsplit=1)html = html.strip()if len(html) > 0: text = parser(html) return url, textdef process_warc(file_name, parser, limit=10000): warc_file = warc.open(file_name, ’rb’) t0 = time() n_documents = 0 for i, record in enumerate(warc_file):url, doc = read_doc(record, parser)if not doc or not url: continuen_documents += 1if i > limit: break warc_file.close() print(’Parser: %s’ % parser.__name__) print(’Parsing took %s seconds and produced %s documentsn’ % (time() - t0, n_documents))

>>> ! wget https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2018-05/segments/1516084886237.6/warc/CC-MAIN-20180116070444-20180116090444-00000.warc.gz>>> file_name = 'CC-MAIN-20180116070444-20180116090444-00000.warc.gz'>>> process_warc(file_name, get_text_selectolax, 10000)Parser: get_text_selectolaxParsing took 16.170367002487183 seconds and produced 3317 documents>>> process_warc(file_name, get_text_bs, 10000)Parser: get_text_bsParsing took 432.6902508735657 seconds and produced 3283 documents

顯然,這并不是對(duì)某些事物進(jìn)行基準(zhǔn)測試的最佳方法,但是它提供了一個(gè)想法,即selectolax有時(shí)比lxml快30倍。selectolax最適合將HTML剝離為純文本。如果我有10,000多個(gè)HTML片段,需要將它們作為純文本索引到Elasticsearch中。(Elasticsearch有一個(gè)html_strip文本過濾器,但這不是我想要/不需要在此上下文中使用的過濾器)。事實(shí)證明,以這種規(guī)模將HTML剝離為純文本實(shí)際上是非常低效的。那么,最有效的方法是什么?

PyQuery

from pyquery import PyQuery as pqtext = pq(html).text() selectolax

from selectolax.parser import HTMLParsertext = HTMLParser(html).text() 正則表達(dá)式

import reregex = re.compile(r’<.*?>’)text = clean_regex.sub(’’, html)結(jié)果

我編寫了一個(gè)腳本來計(jì)算時(shí)間,該腳本遍歷包含HTML片段的10,000個(gè)文件。注意!這些片段不是完整的<html>文檔(帶有<head>和<body>等),只是HTML的一小部分。平均大小為10,314字節(jié)(中位數(shù)為5138字節(jié))。結(jié)果如下:

pyquery SUM: 18.61 seconds MEAN: 1.8633 ms MEDIAN: 1.0554 msselectolax SUM: 3.08 seconds MEAN: 0.3149 ms MEDIAN: 0.1621 msregex SUM: 1.64 seconds MEAN: 0.1613 ms MEDIAN: 0.0881 ms

我已經(jīng)運(yùn)行了很多次,結(jié)果非常穩(wěn)定。重點(diǎn)是:selectolax比PyQuery快7倍。

正則表達(dá)式好用?真的嗎?

對(duì)于最基本的HTML Blob,它可能工作得很好。實(shí)際上,如果HTML是<p> Foo&amp; Bar </ p>,我希望純文本轉(zhuǎn)換應(yīng)該是Foo&Bar,而不是Foo&amp; bar。更重要的一點(diǎn)是,PyQuery和selectolax支持非常特定但對(duì)我的用例很重要的內(nèi)容。在繼續(xù)之前,我需要?jiǎng)h除某些標(biāo)簽(及其內(nèi)容)。例如:

<h4 class='warning'>This should get stripped.</h4><p>Please keep.</p><div style='display: none'>This should also get stripped.</div>

正則表達(dá)式永遠(yuǎn)無法做到這一點(diǎn)。

2.0 版本

因此,我的要求可能會(huì)發(fā)生變化,但基本上,我想刪除某些標(biāo)簽。例如:<div class =“ warning”> 、 <div class =“ hidden”> 和 <div style =“ display:none”>。因此,讓我們實(shí)現(xiàn)一下:

PyQuery

from pyquery import PyQuery as pq_display_none_regex = re.compile(r’display:s*none’)doc = pq(html)doc.remove(’div.warning, div.hidden’)for div in doc(’div[style]’).items(): style_value = div.attr(’style’) if _display_none_regex.search(style_value):div.remove()text = doc.text() selectolax

from selectolax.parser import HTMLParser_display_none_regex = re.compile(r’display:s*none’)tree = HTMLParser(html)for tag in tree.css(’div.warning, div.hidden’): tag.decompose()for tag in tree.css(’div[style]’): style_value = tag.attributes[’style’] if style_value and _display_none_regex.search(style_value):tag.decompose()text = tree.body.text()

這實(shí)際上有效。當(dāng)我現(xiàn)在為10,000個(gè)片段運(yùn)行相同的基準(zhǔn)時(shí),新結(jié)果如下:

pyquery SUM: 21.70 seconds MEAN: 2.1701 ms MEDIAN: 1.3989 msselectolax SUM: 3.59 seconds MEAN: 0.3589 ms MEDIAN: 0.2184 msregex Skip

同樣,selectolax擊敗PyQuery約6倍。

結(jié)論

正則表達(dá)式速度快,但功能弱。selectolax的效率令人印象深刻。

以上就是python 提取html文本的方法的詳細(xì)內(nèi)容,更多關(guān)于python 提取html文本的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品麻豆| 一区二区三区四区精品视频| 国产乱码精品一区二区三区亚洲人| 久久性天堂网| 亚洲网址在线观看| 日韩高清一级| 国产探花在线精品| 久久中文字幕一区二区| 国精品产品一区| а√在线中文在线新版| 92国产精品| 国内精品福利| 蜜臀久久久久久久| 亚洲精品伊人| 国产精品极品在线观看| 久久国产乱子精品免费女| 97精品久久| 国产一区二区三区四区| а√天堂8资源中文在线| 三级精品视频| 视频一区二区欧美| 日韩高清欧美激情| 久久97视频| 国产成人精品亚洲日本在线观看| 婷婷成人综合| 亚洲精品美女91| 久久精品资源| 婷婷国产精品| 日本一区二区中文字幕| 欧美激情在线精品一区二区三区| 国产一区二区三区四区大秀| 999视频精品| 亚洲专区视频| 久久久国产精品入口麻豆| 日韩欧美一区二区三区在线观看| 久久午夜精品| 麻豆久久一区二区| 在线日韩视频| 青草国产精品久久久久久| 美女视频网站久久| 99久久亚洲精品蜜臀| 色综合视频一区二区三区日韩 | 麻豆视频在线观看免费网站黄 | 视频一区中文字幕精品| 精品视频一二| 亚洲精品1区| 午夜日韩av| 免费看欧美美女黄的网站| 91欧美极品| 国产精品一区二区三区www| 蜜臀国产一区| 亚洲人成网77777色在线播放| 久久精品一区| 日韩在线播放一区二区| 风间由美中文字幕在线看视频国产欧美| 国内精品福利| 国产精品2区| 欧美在线亚洲| 麻豆精品在线视频| 亚洲免费一区二区| 精品精品久久| 亚洲精品欧洲| 色综合www| 日本va欧美va瓶| 亚洲伦乱视频| 久久精品99久久久| 激情久久久久久| 美女精品久久| 国产日本精品| 日韩欧美看国产| 日韩成人午夜精品| 亚洲午夜视频| 鲁大师精品99久久久| 午夜欧美视频| 国产一区二区三区视频在线| 一本综合精品| 国产精品99免费看| 美女免费视频一区| 日韩精品社区| 蜜桃视频欧美| 激情中国色综合| 日韩国产在线观看| 麻豆久久精品| 久久在线免费| 国产在线观看91一区二区三区| 亚洲精品大全| 一本一本久久| 日韩精品看片| 精品久久久久中文字幕小说| 亚洲精品高潮| 99热精品在线| 欧美精品一区二区久久| 午夜久久中文| 日韩av自拍| 久久国产人妖系列| 亚洲三级毛片| 欧美中文字幕| 欧美日韩少妇| 国户精品久久久久久久久久久不卡| 国产精品99在线观看| 国产伦一区二区三区| 亚洲69av| 亚洲精品自拍| 亚洲综合中文| 一区二区91| 热久久国产精品| 国产一级一区二区| 好吊日精品视频| 欧美成人精品| 91精品久久久久久久久久不卡| 久久影院午夜精品| 亚洲免费福利| 视频福利一区| 久久国产电影| 国产一区亚洲| 亚洲国产不卡| 99re国产精品| 欧美资源在线| 中文字幕av一区二区三区四区| 亚洲欧美网站| 首页亚洲欧美制服丝腿| 亚洲欧美日韩综合国产aⅴ| 在线亚洲自拍| 免费久久99精品国产自在现线| 日韩一区二区久久| 91精品观看| 国产农村妇女精品一区二区| 国产麻豆综合| 色狠狠一区二区三区| 日韩专区视频网站| 欧美一区成人| 麻豆精品一区二区综合av| 久久精品女人| 日韩欧美精品| 韩日一区二区三区| 日韩中文字幕av电影| 亚洲精品高潮| 国产麻豆一区二区三区| 精品亚洲成人| 日韩在线综合| 一本一道久久a久久精品蜜桃| 国产亚洲精品久久久久婷婷瑜伽| 天堂成人国产精品一区| 日韩精品一区二区三区免费视频| 国产美女精品视频免费播放软件| 精品国产欧美日韩| 国产综合色区在线观看| 亚洲高清影视| 日韩精品乱码av一区二区| 国产免费av一区二区三区| 精品久久免费| 在线精品国产亚洲| 国产一区国产二区国产三区| 国产成人免费| 91亚洲一区| 成人久久一区| 国产模特精品视频久久久久| 色8久久久久| 久久亚洲人体| 欧美性感美女一区二区| 中文视频一区| 美女在线视频一区| 色爱av综合网| 亚洲日本免费电影| 国产精品永久| 亚洲成人精品| 亚洲精品精选| 国产一区丝袜| 在线综合欧美| 欧美一区网站| 欧美三级网址| 亚洲精品第一| 日韩大片在线| 亚洲精选成人| 成人午夜网址| 国产精品免费看| 国产极品模特精品一二| 亚洲爱爱视频| 日本国产一区| 精品黄色一级片| 国产一区二区精品久| 欧美美女一区| 国产精品蜜月aⅴ在线| 欧美日韩精品免费观看视欧美高清免费大片 | 午夜电影一区| 国产成人精品免费视| 视频精品一区二区| 精品视频免费| 石原莉奈一区二区三区在线观看| 国产精品1区在线| 亚洲综合不卡| 岛国av在线播放| 婷婷综合电影| 99热精品久久| 国产伦精品一区二区三区在线播放| 99久久精品国产亚洲精品| 欧美三级第一页| 久久中文字幕av一区二区不卡| 国产伦精品一区二区三区视频| 欧美在线亚洲|