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

您的位置:首頁技術文章
文章詳情頁

python 提取html文本的方法

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

假設我們需要從各種網頁中提取全文,并且要剝離所有HTML標記。通常,默認解決方案是使用BeautifulSoup軟件包中的get_text方法,該方法內部使用lxml。這是一個經過充分測試的解決方案,但是在處理成千上萬個HTML文檔時可能會非常慢。通過用selectolax替換BeautifulSoup,您幾乎可以免費獲得5-30倍的加速!這是一個簡單的基準測試,可分析commoncrawl(`處理NLP問題時,有時您需要獲得大量的文本集。互聯網是文本的最大來源,但是不幸的是,從任意HTML頁面提取文本是一項艱巨而痛苦的任務。假設我們需要從各種網頁中提取全文,并且要剝離所有HTML標記。通常,默認解決方案是使用BeautifulSoup軟件包中的get_text方法,該方法內部使用lxml。這是一個經過充分測試的解決方案,但是在處理成千上萬個HTML文檔時可能會非常慢。通過用selectolax替換BeautifulSoup,您幾乎可以免費獲得5-30倍的加速!這是一個簡單的基準測試,可分析commoncrawl(https://commoncrawl.org/)的10,000個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

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

PyQuery

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

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

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

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

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

我已經運行了很多次,結果非常穩定。重點是:selectolax比PyQuery快7倍。

正則表達式好用?真的嗎?

對于最基本的HTML Blob,它可能工作得很好。實際上,如果HTML是<p> Foo&amp; Bar </ p>,我希望純文本轉換應該是Foo&Bar,而不是Foo&amp; bar。更重要的一點是,PyQuery和selectolax支持非常特定但對我的用例很重要的內容。在繼續之前,我需要刪除某些標簽(及其內容)。例如:

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

正則表達式永遠無法做到這一點。

2.0 版本

因此,我的要求可能會發生變化,但基本上,我想刪除某些標簽。例如:<div class =“ warning”> 、 <div class =“ hidden”> 和 <div style =“ display:none”>。因此,讓我們實現一下:

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()

這實際上有效。當我現在為10,000個片段運行相同的基準時,新結果如下:

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倍。

結論

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

以上就是python 提取html文本的方法的詳細內容,更多關于python 提取html文本的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合欧美亚洲| 久久狠狠婷婷| 不卡一区2区| 日韩欧美在线中字| 国产91在线精品| 欧美精品97| 久久亚洲国产精品尤物| 麻豆久久一区| 欧美亚洲三级| 麻豆精品视频在线观看视频| 精品精品99| 久久久久97| 97在线精品| 久久国产免费| 亚洲精品1区2区| 中文字幕免费一区二区| 亚欧成人精品| 日韩avvvv在线播放| 欧美日韩91| 精品一区二区三区中文字幕在线| 成人在线超碰| 久久黄色影院| 日韩在线卡一卡二| 中文字幕日韩欧美精品高清在线| 日韩一区二区三区高清在线观看| 日韩欧美中文字幕在线视频| 国产欧美日韩视频在线| 国产91在线播放精品| 啪啪国产精品| 亚洲在线免费| 91亚洲精品视频在线观看| 久久99影视| 久久人人97超碰国产公开结果| 欧美羞羞视频| 亚洲尤物在线| 久久国产乱子精品免费女| 久久99久久久精品欧美| 日韩大片在线播放| 久久亚洲国产| 日本成人手机在线| 精品免费视频| 最新国产拍偷乱拍精品| 日韩二区三区在线观看| 国产成人免费av一区二区午夜| 中文字幕一区二区三区四区久久| 国产精品99一区二区三| 国产va在线视频| 日韩中文字幕一区二区高清99| 国产欧美日韩在线一区二区| 亲子伦视频一区二区三区| 一区二区三区网站| 麻豆视频久久| 欧美日韩国产一区精品一区| 一二三区精品| 精品亚洲a∨一区二区三区18| 国产99精品| 国产精品亚洲欧美| 不卡在线一区二区| 国产剧情一区二区在线观看| 欧美日韩水蜜桃| 国产成人精品一区二区三区免费| 不卡中文一二三区| 国产欧美日韩一级| 欧美亚洲国产一区| 国产午夜久久av| 国产精品99免费看| 欧美激情日韩| 日韩在线卡一卡二| 国产一区一一区高清不卡| 亚洲综合日本| 亚洲黄色免费看| 日韩精品成人在线观看| 欧美综合精品| 136国产福利精品导航网址| 性欧美长视频| 久久伊人国产| 免费在线成人网| 电影91久久久| 中文字幕一区二区三区日韩精品| 日韩不卡一区| 日韩欧美中文在线观看| 99精品视频在线| 免费精品一区| 欧美精品自拍| 成人啊v在线| 欧美精品国产一区| 日韩欧美久久| 精品中文字幕一区二区三区| 久久精品97| 亚洲成人精品| 国产精品久久久久久久久免费高清 | 国产午夜久久av| 欧美日韩国产探花| 日韩欧美一区免费| 国产不卡一区| 日韩精品一区二区三区中文在线| 免费视频亚洲| 日韩一区二区在线免费| 国产激情一区| 日韩av字幕| 噜噜噜躁狠狠躁狠狠精品视频| 久久婷婷av| 国产一二在线播放| 久久精品国产99| 国产日韩亚洲欧美精品| 亚欧成人精品| 男女精品网站| 亚洲欧美日韩精品一区二区| 亚洲一级特黄| 色天使综合视频| 欧美久久香蕉| 日本成人一区二区| 日韩精品免费视频人成| 中文一区一区三区免费在线观 | 999久久久国产精品| 91视频一区| 成人精品高清在线视频| 久久99国产精品视频| 国产精品日本一区二区三区在线| 日韩精品五月天| 中文一区一区三区免费在线观| 国产精品视区| 久久国产88| 日韩制服丝袜av| 免费在线观看一区二区三区| 首页亚洲欧美制服丝腿| 首页国产欧美久久| 久久电影一区| 蜜桃av一区二区三区电影| 亚洲综合精品| 亚洲精品日韩久久| 日韩国产精品久久久久久亚洲| 蜜臀av一区二区三区| 蜜桃视频免费观看一区| 中文字幕一区二区三区在线视频| 在线看片一区| 日韩中文字幕| 国产精品欧美大片| 麻豆成人在线观看| 国产成年精品| 久久国产电影| 国产精品毛片在线| 综合亚洲色图| 国产欧美三级| 97人人精品| 激情综合在线| 只有精品亚洲| 国产精品亚洲四区在线观看| 国产中文欧美日韩在线| 99久久九九| 欧美午夜不卡影院在线观看完整版免费 | 青青草视频一区| 久久亚州av| 1024精品一区二区三区| 人人精品人人爱| 欧美精品观看| 欧美日韩国产观看视频| 91久久国产| 日韩精品一页| 粉嫩av一区二区三区四区五区 | 蜜臀久久99精品久久久久宅男 | 色婷婷精品视频| 蜜桃伊人久久| 国产精品一区二区99| 免费在线小视频| 天堂va蜜桃一区二区三区| 欧美日韩91| 麻豆精品蜜桃| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩va| 午夜av不卡| 免费精品视频最新在线| 国产午夜精品一区在线观看| 成人国产综合| 鲁大师成人一区二区三区| 国产欧美91| 国产高清久久| 国产精品v亚洲精品v日韩精品| 亚洲播播91| 六月丁香综合| 九九久久国产| 国产精品日韩| 精品日韩一区| 日韩专区欧美专区| 欧美xxxx中国| 亚洲精品看片| av资源亚洲| 亚洲麻豆一区| 裤袜国产欧美精品一区| 天海翼精品一区二区三区| 国产精品99一区二区三| 免费观看在线综合| 亚洲深夜视频| 欧美日韩一区自拍| 美女毛片一区二区三区四区| 国产美女久久| 99国产精品久久久久久久| 国产精品白丝久久av网站| 99成人在线| 夜鲁夜鲁夜鲁视频在线播放|