Beautifulsoup功能在特定情况下无法正常工作

时间:2013-04-21 17:57:41

标签: python beautifulsoup urllib2 html5lib

我正在尝试使用urllib2:http://frcwest.com/读取以下网址,然后在数据中搜索元重定向。

它读取以下数据:

   <!--?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')

甚至没有工作然后我被卡住了。任何煽动这个谜的人都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分: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"/>]