簡體   English   中英

如何在python中修改這個html文件?

[英]How can I modify this html file in python?

我要修改一個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'

我能夠使用迭代變量 old 的相同方式來更改 html 文件,但我無法將所有這些都嵌套在范圍循環中,關於如何做到這一點的任何想法或者是否有更簡單的修改方法?

當它拋出AttributeError: 'NoneType' object has no attribute 'replace_with'錯誤時,這意味着它無法在文本中find()您想要的字符串,因此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
[...]

從我從你的問題中了解到,你想更換

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM