【问题标题】:Beautifulsoup functionality not working properly in specific scenarioBeautifulsoup 功能在特定情况下无法正常工作
【发布时间】:2013-04-14 14:29:26
【问题描述】:

我正在尝试使用 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 可以正常工作。但是由于某种原因,没有一个功能适用于这个特定的 senarious,我不明白为什么。 Beautifulsoup 在所有其他情况下都对我很有效。但是,当简单地尝试时:

    soup.findAll('meta')

不产生任何结果。

我的最终目标是跑步:

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

但是如果:

    soup.findAll('meta')

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

【问题讨论】:

  • 您使用的是什么版本的 Beautifulsoup?使用import requests; from bs4 import BeautifulSoup; BeautifulSoup(requests.get(your_url)).find_all('meta') 对我来说很好..
  • 嗨,乔恩,感谢您的快速回复。我正在使用bs4。但是要导入,请解析我使用 httplib2 和 html5lib 的数据。根据您的回复和 Martijn 的回复,这似乎是错误的根源。您似乎正在使用 requests 库(来自 python-requests.org )使其工作。我不知道该资源,我将进一步使用它,谢谢!

标签: python beautifulsoup urllib2 html5lib


【解决方案1】:

是注释和文档类型将解析器抛出到这里,然后是 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"/>]

【讨论】:

  • 感谢伟大的煽动和评论,谜团解开了!几天来一直在努力解决这个问题,感谢您清晰而迅速的回应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2017-09-23
  • 2013-01-04
  • 2013-11-06
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多