最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python實現(xiàn)翻譯HTML中的文本字符串

 更新時間:2022年06月21日 09:57:01   作者:kingname  
這篇文章主要為大家介紹了如何利用Python實現(xiàn)翻譯HTML中的文本字符串功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下

相信大家都用過瀏覽器的翻譯網(wǎng)頁功能,例如對于下圖這個英文網(wǎng)頁:

一鍵翻譯成中文以后是這樣的:

你可能會覺得這個功能很簡單,不就是字符串替換嗎?那你可以試一試把下面這個HTML片段中的<p>標(biāo)簽下面的英文翻譯成中文。其它標(biāo)簽中的不要改動:

<div>
?<p>if?you?want?to?parse?date?and?time,?your?could?use?<em>datetime</em>,?by?use?this?library,?you?can?generate?now?time?by?one?line?code?<span>datetime.datetime.now()</span>?this?is?so?easy.</p>
</div>

<em>標(biāo)簽中的datetime<span>標(biāo)簽中的datetime.datetime.now()不需要翻譯。

你一拍腦袋,馬上寫出了下面這幾行代碼(假設(shè)你已經(jīng)有了一個現(xiàn)成的translate()函數(shù),傳入英文,輸出中文):

from?lxml.html?import?fromstring
source?=?'''<div>
?<p>if?you?want?to?parse?date?and?time,?your?could?use?<em>datetime</em>,?by?use?this?library,?you?can?generate?now?time?by?one?line?code?<span>datetime.datetime.now()</span>?this?is?so?easy.</p>
</div>
'''

selector?=?fromstring(source)
text_list?=?selector.xpath('//p/text()')
for?text?in?text_list:
????chinese?=?translate(text)
????...

當(dāng)你寫到這里,你應(yīng)該會愣一下。因為你突然發(fā)現(xiàn)一個問題,怎么把中文替換回去?

不用嘗試去百度了。在今天(2022-06-20)之前,整個中文網(wǎng)絡(luò)里面,你找不到解決方法。

一個比較笨的辦法是直接對原始的HTML字符串進(jìn)行文本替換:

for?text?in?text_list:
????chinese?=?translate(text)
????source?=?source.replace(text,?chinese)

但這樣做,效率非常低。因為你要不停掃描整個HTML字符串。一般一個中型網(wǎng)站的HTML就有幾千上萬行,十幾二十萬個字符。你每翻譯一小段就全文替換一次,這個時間會非常漫長。

那有沒有辦法只對當(dāng)前這一個<p>標(biāo)簽里面的文本進(jìn)行替換呢?關(guān)鍵的問題來了,你替換可以,但是怎么才能不影響這個<p>標(biāo)簽下面的兩個子標(biāo)簽?要保證文本和子標(biāo)簽的相對位置不改變。

如果<p>標(biāo)簽下面只有一段文本,沒有子標(biāo)簽,那么非常簡單,如下圖所示:

但現(xiàn)在的問題是,<p>標(biāo)簽下面有三段文本。每段文本之間還插入了其它的子標(biāo)簽。我們怎么樣對每一段文本進(jìn)行替換,但是又保持文本的相對順序,并且還不能影響子標(biāo)簽?

p.text這種寫法首先就可以排除了,因為它沒有辦法指定替換第幾段文本。

你之所以會覺得這個問題很難解決,是因為你有一個錯覺,請看上面這張截圖,我打印了text_list。打印出來是一個包含字符串的列表。所以你可能會覺得。使用lxml寫Xpath的時候,/text()返回的總是包含字符串的列表。

但實際上,返回的列表里面的元素并不是字符串,而是_ElementUnicodeResult對象。如下圖所示:

不是字符串就簡單了,那么我們可以獲取每一個文本對象的父標(biāo)簽。然后修改父標(biāo)簽下面的文本就可以了。

看到這里,你肯定會問,這三個文本節(jié)點的父標(biāo)簽,不都是同一個<p>嗎?如果你覺得是,那你就犯了想當(dāng)然的錯誤。我們用代碼來看看:

其實只有第一段文本的父標(biāo)簽是<p>。第二段文本的父標(biāo)簽,竟然是<p>的子標(biāo)簽<em>。第三段文本的父標(biāo)簽,是<span>。

等等,如果第二段文本的父標(biāo)簽是<em>,那么<em>datetime</em>里面的datetime的父標(biāo)簽是什么?它的父標(biāo)簽也是<em>!那么問題來了,<em>text()文本節(jié)點,怎么可能又是datetime,又是<p>下面的第二段文本呢?

實際上,<em>text()始終都是datetime。如下圖所示:

那么,<p>的第二段文本跟這個<em>標(biāo)簽是什么關(guān)系?實際上,這個關(guān)系叫做tail。如下圖所示:

在一個標(biāo)簽里面,只有第一段text是它真正的text(),如果這個標(biāo)簽有子標(biāo)簽,那么位于子標(biāo)簽后面的文本,是這個子標(biāo)簽的tail。只不過當(dāng)我們在正則表達(dá)式里面寫/text()的時候,lxml會幫我們把所有子標(biāo)簽的tail都算作當(dāng)前標(biāo)簽的text。

我們可以使用文本節(jié)點的.is_text.is_tail來判斷它屬于哪種文本。最終運行效果如下圖所示:

以上就是利用Python實現(xiàn)翻譯HTML中的文本字符串的詳細(xì)內(nèi)容,更多關(guān)于Python翻譯HTML中字符串的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python字符串的一些操作方法總結(jié)

    Python字符串的一些操作方法總結(jié)

    在本文里小編給大家整理了關(guān)于Python字符串的一些操作方法和相關(guān)要點總結(jié),有需要的朋友們可以學(xué)習(xí)下。
    2019-06-06
  • Python安裝Matplotlib包完整步驟記錄

    Python安裝Matplotlib包完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Python安裝Matplotlib包的相關(guān)資料,Matplotlib是一個Python 2D繪圖庫,它以多種硬拷貝格式和跨平臺的交互式環(huán)境生成出版物質(zhì)量的圖形,需要的朋友可以參考下
    2023-12-12
  • python的numpy模塊安裝不成功簡單解決方法總結(jié)

    python的numpy模塊安裝不成功簡單解決方法總結(jié)

    這篇文章主要介紹了python的numpy模塊安裝不成功簡單解決方法總結(jié),分享了四種python模塊導(dǎo)入不成功的解決方法,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python csv模塊使用方法代碼實例

    Python csv模塊使用方法代碼實例

    這篇文章主要介紹了Python csv模塊使用方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python多進(jìn)程并發(fā)與同步機制超詳細(xì)講解

    Python多進(jìn)程并發(fā)與同步機制超詳細(xì)講解

    進(jìn)程(Process),顧名思義,就是進(jìn)行中的程序。有一句話說得好:程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成為一個活動的實體。進(jìn)程是資源分配的最小單元,也就是說每個進(jìn)程都有其單獨的內(nèi)存空間
    2022-12-12
  • python實現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法

    python實現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法

    這篇文章主要介紹了python實現(xiàn)將元祖轉(zhuǎn)換成數(shù)組的方法,涉及Python中l(wèi)ist方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

    Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法詳解

    這篇文章主要介紹了Python使用循環(huán)神經(jīng)網(wǎng)絡(luò)解決文本分類問題的方法,結(jié)合實例形式詳細(xì)分析了Python神經(jīng)網(wǎng)絡(luò)相關(guān)概念、原理及解決文本分類具體操作技巧,需要的朋友可以參考下
    2020-01-01
  • 一文弄懂10大Pandas的索引

    一文弄懂10大Pandas的索引

    索引在我們的日常生活中其實是很常見的,本文主要介紹了一文弄懂10大Pandas的索引,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法示例

    Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法示例

    這篇文章主要介紹了Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法,涉及Python二叉樹構(gòu)建、遍歷及鏈表構(gòu)造等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • python編寫微信公眾號首圖思路詳解

    python編寫微信公眾號首圖思路詳解

    這篇文章主要介紹了python編寫微信公眾號首圖的思路,根據(jù)微信公眾號首圖要求,可以上傳一個不超過5M的圖片,且圖片尺寸要是2.35:1的尺寸,具體實現(xiàn)思路及代碼感興趣的朋友跟隨小編一起看看吧
    2019-12-12

最新評論

昌邑市| 磴口县| 九江市| 漳州市| 乐亭县| 长寿区| 康保县| 东台市| 和龙市| 海晏县| 泾源县| 金乡县| 杭州市| 道真| 安乡县| 阳朔县| 石柱| 从化市| 长治市| 长沙市| 旺苍县| 东港市| 五台县| 铁岭县| 江都市| 仙游县| 中西区| 朝阳县| 扎赉特旗| 曲阜市| 美姑县| 巨野县| 隆安县| 株洲市| 尚志市| 天水市| 平定县| 天峨县| 樟树市| 大兴区| 江安县|