电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

python 提取html文本的方法

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

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

# 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)測(cè)試的最佳方法,但是它提供了一個(gè)想法,即selectolax有時(shí)比lxml快30倍。selectolax最適合將HTML剝離為純文本。如果我有10,000多個(gè)HTML片段,需要將它們作為純文本索引到Elasticsearch中。(Elasticsearch有一個(gè)html_strip文本過(guò)濾器,但這不是我想要/不需要在此上下文中使用的過(guò)濾器)。事實(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è)腳本來(lái)計(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)無(wú)法做到這一點(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)文章:
主站蜘蛛池模板: 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 北京京云律师事务所 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 液压升降货梯_导轨式升降货梯厂家_升降货梯厂家-河南东圣升降设备有限公司 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 浙江上沪阀门有限公司 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 暴风影音| 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | EPDM密封胶条-EPDM密封垫片-EPDM生产厂家| 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 潍坊大集网-潍坊信息港-潍坊信息网| 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 猎头招聘_深圳猎头公司_知名猎头公司 | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 2025福建平潭岛旅游攻略|蓝眼泪,景点,住宿攻略-趣平潭网 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 |