如何在python中修改此html文件?

2024-10-02 02:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想修改一个html文件,因此标记字体包含我想修改的文本

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

数字从1变为128,所以我决定像这样对范围内的n循环使用(我在字符串开头使用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' object has no attribute 'replace_with'

我可以用同样的方法在变量old上迭代来修改html文件,但我不能将所有这些都嵌套在range循环中,有没有办法做到这一点,或者有没有更简单的修改方法


Tags: 文件innumberforhtmlwithrangeold
2条回答

根据我对你问题的理解,你想替换

PAT-204635 - LAICHE AHMED ILYES - Number {n}

PAT-204635 - LAICHE MOHAMED ISLAM - Number {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>

当它抛出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
[...]

相关问题 更多 >

    热门问题