2013-04-21 71 views
1

我正嘗試使用urllib2在以下URL中讀取:http://frcwest.com/然後搜索數據以找到元重定向。Beautifulsoup功能在特定的senario中無法正常工作

它讀取以下數據:

<!--?xml version="1.0" encoding="UTF-8"?--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"><head><title></title><meta content="0;url= Home.html" http-equiv="refresh"/></head><body></body></html> 

讀入Beautifulsoup工作正常。然而由於某些原因,沒有任何功能適用於這種特定的危險,我不明白爲什麼。 Beautifulsoup在所有其他情況下都非常適合我。但是,在簡單嘗試時:

soup.findAll('meta') 

不產生任何結果。

我的最終目標是運行:

soup.find("meta",attrs={"http-equiv":"refresh"}) 

但如果:

soup.findAll('meta') 

甚至沒有工作,然後我卡。任何煽動這個謎,將不勝感激,謝謝!

+0

什麼版本Beautifulsoup您使用的是?使用'導入請求;從bs4導入BeautifulSoup; BeautifulSoup(requests.get(your_url))。find_all('meta')'對我來說工作正常.. – 2013-04-21 18:23:52

+0

嘿喬恩,感謝您的快速回復。我正在使用bs4。但是要導入,解析我使用httplib2和html5lib的數據。根據你的迴應和Martijn的迴應,看起來這是錯誤的根源。看來你正在使用請求庫(來自python-requests.org)來使它工作。我不知道這些資源,我會繼續玩下去,謝謝! – bmiskie 2013-04-21 18:40:41

回答

2

這是在這裏拋出解析器的註釋和doctype,隨後是BeautifulSoup。

即使HTML標籤似乎 '水漲船高':

>>> soup.find('html') is None 
True 

但它的存在在.contents迭代依然。你可以再次找到的東西:

for elem in soup: 
    if getattr(elem, 'name', None) == u'html': 
     soup = elem 
     break 

soup.find_all('meta') 

演示:

>>> for elem in soup: 
...  if getattr(elem, 'name', None) == u'html': 
...   soup = elem 
...   break 
... 
>>> soup.find_all('meta') 
[<meta content="0;url= Home.html" http-equiv="refresh"/>] 
+0

感謝您的煽動和評論,神祕解決!感謝這個明確而迅速的迴應,我幾天來一直在反駁這個問題。 – bmiskie 2013-04-21 18:41:38