開始我用BeautifulSoup分析網頁時候這樣作:html
#從文件讀取html源文件內容 with open("html.txt", "r", encoding='utf-8') as file: content = file.read() #替換轉義字符 map = {"<" : "<", ">" : ">", "&" : "&", """ : "\"", "©" : "©"} for (k, v) in map.items(): content = content.replace(k, v) #獲取網頁Tag結構 soup = BeautifulSoup(str, 'lxml')
後來發現會出現奇怪的問題,原來上面的替換畫蛇添足。
BeautifulSoup會將HTML的實例都轉換成Unicode編碼,並且在獲取內容時候會自動替換爲字符串。
因此上面的代碼能夠直接簡化爲:python
soup = BeautifulSoup(open("html.txt", "r", encoding='utf-8'), 'lxml')
具體例子:web
from bs4 import BeautifulSoup html_str = ''' <html><body> <div> > 咱們的祖國是花園 <) </div> </body></html> ''' soup = BeautifulSoup(html_str, 'lxml') print(soup.div) print(soup.div.string)
輸出正常:svg
<div> > 咱們的祖國是花園 <) </div> > 咱們的祖國是花園 <)
若是咱們先對字符串進行了替換,以下面這個程序:ui
from bs4 import BeautifulSoup html_str = ''' <html><body> <div> > 咱們的祖國是花園 <) </div> </body></html> ''' soup = BeautifulSoup(html_str, 'lxml') print(soup.div) print(soup.div.string)
輸出:編碼
<div> > 咱們的祖國是花園 </div> > 咱們的祖國是花園
發現<)
這兩個字符會由於BeautifulSoup的容錯能力而形成丟失。spa