Python爬蟲:使用BeautifulSoup分析網頁結構注意事項

開始我用BeautifulSoup分析網頁時候這樣作:html

#從文件讀取html源文件內容
with open("html.txt", "r", encoding='utf-8') as file:
    content = file.read()
    
#替換轉義字符 
map = {"&lt;" : "<",
        "&gt;" : ">",
        "&amp;" : "&",
        "&quot;" : "\"",
        "&copy;" : "©"}
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> &gt; 咱們的祖國是花園 &lt;) </div> </body></html> '''
soup = BeautifulSoup(html_str, 'lxml')
print(soup.div)
print(soup.div.string)

輸出正常:svg

<div>
&gt; 咱們的祖國是花園 &lt;)
</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>
&gt; 咱們的祖國是花園 
</div>

> 咱們的祖國是花園

發現<)這兩個字符會由於BeautifulSoup的容錯能力而形成丟失。spa

相關文章
相關標籤/搜索