2017-04-05 119 views
0
from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re 

html = urlopen("http://www.bbc.co.uk/iplayer/live/bbcone?area=london") 
bsObj = BeautifulSoup(html, "html.parser") 
version = bsObj.find(string = re.compile('DOCTYPE html')) 

if version in bsObj: 
    print("Yes") 
else: 
    print("No") 

我知道「http://www.bbc.co.uk/iplayer/live/bbcone?area=london」是HTML 5(!DOCTYPE HTML)DOCTYPE聲明,但是當我運行此腳本輸出是「否」。我究竟做錯了什麼?要打印的文檔類型聲明

+0

''不是HTML標籤,但聲明和'find()'不適用於這些的全文。顯然。有關一些想法,請參閱http://stackoverflow.com/questions/2499358/get-document-doctype-with-beautifulsoup。 – kindall

+0

@kindall - 這個問題看起來像它應該是一個愚蠢的,雖然我猶豫不決,因爲你沒有;-) ... – mgilson

+0

我覺得這個問題不是一個嚴格的愚蠢,因爲它是問問'.find()'是什麼問題,而不是如何獲得文檔類型。 – kindall

回答

0

Doctype是一個給瀏覽器的指令,所以find和find_all不會正常找到它,因爲它不是html標籤。

除此之外,你的正則表達式不起作用,因爲BS中的string值只有html而不是DOCTYPE html

可以使用鏈接,用戶kindall提到或使用這種方式:

import requests 
from bs4 import BeautifulSoup, Doctype 

html = requests.get("http://www.bbc.co.uk/iplayer/live/bbcone?area=london") 
soup = BeautifulSoup(html.content, "html.parser") 
version = soup.find_all(string="html") 
DOCTYPE = next(item for item in version if isinstance(item, Doctype)) 

print (DOCTYPE) 

,它將打印:

HTML