【问题标题】:I want to insert text in html using python我想使用 python 在 html 中插入文本
【发布时间】:2021-08-21 17:57:54
【问题描述】:

我是一名 python 开发人员,还在学习,我需要一些关于抓取概念的帮助,我只想告诉你我想要什么。下面是html代码。 包含不同的标签,例如“em”、p 和 span。

类不同,分别命名为obisnuit和obisnuit2。

html1="""<p class="text_obisnuit2">Best 3 developers.</p>
        <p class="text_obisnuit">There are best three types of web developers in world.</p>
        <p class="text_obisnuit2"><em>A javascript web developer.</em></p>
        <p class="text_obisnuit"><em>A nodeJS web developer.</em></p>
        <p class="text_obisnuit"><em>A python web developer <span class="text_obisnuit2">Django developer</span></em></p>
"""

我正在尝试在它们之间翻译文本并插入文本的翻译版本,我在这件事上取得了成功,但问题出在标签中。

下面是我的代码:当我尝试使用此方法抓取文本时,删除了 em 标记,只成功插入了文本。

from bs4 import BeautifulSoup
import translators as ts
soup1=BeautifulSoup(html1, 'html.parser')

articles = soup1.find_all('p', {'class':"text_obisnuit"})
for a in articles:  

    original_text=a.text
    #print(original_text)
    translated_output=ts.google(original_text, from_language='en', to_language='ro')


    a.string = translated_output.lower()
    print(a.string)



        

运行上述方法后,输出为:

OUTPUT>>

<p class =" text_obisnuit2 "> Cei mai buni 3 dezvoltatori. </p>
<p class = "text_obisnuit"> Există cele mai bune trei tipuri de dezvoltatori web din lume. </p>
<p class = "text_obisnuit2"> Un dezvoltator web javascript. </p>
<p class = "text_obisnuit"> Un dezvoltator web nodeJS. </p>
<p class = "text_obisnuit"> Un dezvoltator web Python <span class = "text_obisnuit2"> Dezvoltator Django </span> </p>

如果你看清楚了,em标签是从输出中去掉的,所以我不希望它被去掉,我要翻译后的html结构一样。

我也试过这个方法,但是只抓取了em标签的文本,而不是整个html文本。

articles = soup1.find_all('em')
for item in articles:    
    original_text=item.text.strip()
    #print(original_text)
    translated_output=ts.google(original_text, from_language='en', to_language='ro')
    #print(item)

    item.string=translated_output
    
    

我想要的输出应该是:

OUTPUT>>

<p class =" text_obisnuit2 "> Cei mai buni 3 dezvoltatori. </p>
<p class = "text_obisnuit"> Există cele mai bune trei tipuri de dezvoltatori web din lume. </p>
<p class = "text_obisnuit2"><em> Un dezvoltator web javascript. </em></p>
<p class = "text_obisnuit"><em> Un dezvoltator web nodeJS. </em></p>
<p class = "text_obisnuit"><em> Un dezvoltator web Python <span class = "text_obisnuit2"> Dezvoltator Django </span></em> </p>

请谁指导我。

【问题讨论】:

    标签: python html beautifulsoup tags translators


    【解决方案1】:

    问题在于,在您的 html 中,文本元素有时是 &lt;p&gt; 的直接子元素,有时埋在下面两三层。在你的原始 html 上试试这个,看看它是否有效:

    for item in articles:
        targets = item.find_all()
        if len(targets)==0:        
            item.string=ts.google(item.string, from_language='en', to_language='ro')
        else:
          #EDIT: the next line was dropped: 
          for target in targets:
            if target.string:
                target.string=ts.google(target.string, from_language='en', to_language='ro')
    

    【讨论】:

    • 这就是发生的事情:“ResultSet 对象没有属性 '%s'。您可能将元素列表视为单个元素。当您打算调用 find 时是否调用了 find_all() ()?” % key AttributeError: ResultSet 对象没有属性“字符串”。您可能将元素列表视为单个元素。当你打算调用 find() 时,你调用了 find_all() 吗?
    • @MohammadIzaan 不知道该告诉你什么;这确实适用于您问题中的示例 html - 因此该示例可能不代表您的实际 html。
    • 它不起作用,因为我签入的是示例 html 而不是原始的。
    • 脚本中的第一个错误是:NameError: name 'target' is not defined
    • 然后我将它从目标更改为目标。但错误是我上面发给你的那个。
    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 2020-06-19
    • 2013-05-28
    • 2013-10-08
    • 2019-12-22
    • 2020-09-01
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多