【问题标题】:How can I modify this html file in python?如何在 python 中修改这个 html 文件?
【发布时间】:2021-10-11 09:47:10
【问题描述】:

我要修改一个html文件,所以标签字体包含我要修改的文本

<font color="#FFFFFF" face="Arial">
          PAT-204635 - LAICHE AHMED ILYES - Number 4
         </font>

数字从 1 变为 128,所以我决定像这样使用 for n in range 循环(我在字符串开头使用 f 来插值 n var):

old=d.findAll("font",{"color":"#FFFFFF"})
for n in range(129):
 for i in old:
  new=i.find(text=re.compile(f"PAT-204635 - LAICHE AHMED ILYES - Number {n}")).replace_with (f"PAT-204635 - LAICHE MOHAMED ISLAM - Number {n}")
  with open ("c:/users/dell/desktop/se2.html","wb") as ff:
   ff.write(d.prettify("utf-8"))

我收到一个错误:

AttributeError: 'NonType' 对象没有属性 'replace_with'

我能够使用与旧变量迭代相同的方式来更改 html 文件,但我无法将所有这些都嵌套在范围循环中,关于如何做到这一点的任何想法,或者是否有更简单的修改方法?

【问题讨论】:

  • 请修正代码的缩进。
  • @Ram 已修复,你知道我的问题有什么好的解决方案

标签: python html beautifulsoup


【解决方案1】:

当它抛出AttributeError: 'NoneType' object has no attribute 'replace_with' 错误时,这意味着它在文本中找不到你想要的字符串,所以find() 函数返回None 并且绝对None 没有replace_with 属性.
这样做可以防止错误:

[...]
old=d.findAll("a",{"title":"Series"})
for n in range(129):
    for i in old:
        try:
            new=i.find(text=re.compile(f"PAT-204635 - LAICHE AHMED ILYES - Number {n}")).replace_with (f"PAT-204635 - LAICHE MOHAMED ISLAM - Number {n}")
        except:
            continue
[...]

【讨论】:

    【解决方案2】:

    根据我从您的问题中了解到,您想替换

    PAT-204635 - LAICHE AHMED ILYES - 编号 {n}

    PAT-204635 - LAICHE MOHAMED ISLAM - 编号 {n}

    你可以试试这个。

    from bs4 import BeautifulSoup
    import re
    d = """
    <font color="#FFFFFF" face="Arial">
              PAT-204635 - LAICHE AHMED ILYES - Number 4
             </font>
    <font color="#FFFFFF" face="Arial">
              PAT-204635 - LAICHE AHMED ILYES - Number 56
             </font>
    <font color="#FFFFFF" face="Arial">
              PAT-204635 - LAICHE AHMED ILYES - Number 9
             </font>
    <font color="#FFFFFF" face="Arial">
              PAT-204635 - LAICHE AHMED ILYES - Number 77
             </font>
    """
    soup = BeautifulSoup(d, 'lxml')
    old = soup.findAll("font",{"color":"#FFFFFF"})
    new= soup.find_all(text=re.compile(r"PAT-204635 - LAICHE AHMED ILYES - Number \d+\b"))
    for i in new:
        num = i.strip().split(' ')[-1]
        i = i.replace_with (f"PAT-204635 - LAICHE MOHAMED ISLAM - Number {num}")
            
    print(soup.prettify())
    

    这就是最终的 HTML 代码的样子。

    <html>
     <body>
      <font color="#FFFFFF" face="Arial">
       PAT-204635 - LAICHE MOHAMED ISLAM - Number 4
      </font>
      <font color="#FFFFFF" face="Arial">
       PAT-204635 - LAICHE MOHAMED ISLAM - Number 56
      </font>
      <font color="#FFFFFF" face="Arial">
       PAT-204635 - LAICHE MOHAMED ISLAM - Number 9
      </font>
      <font color="#FFFFFF" face="Arial">
       PAT-204635 - LAICHE MOHAMED ISLAM - Number 77
      </font>
     </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2010-12-08
      相关资源
      最近更新 更多