2013-04-21 1 views
1

Я пытаюсь прочитать в следующем URL-адресе, используя urllib2: 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 import BeautifulSoup; BeautifulSoup (request.get (your_url)). Find_all ('meta') 'отлично работает для меня .. –

+0

Эй, Джон, спасибо за быстрый ответ. Я использую bs4. Однако для импорта, проанализируйте данные, которые я использую httplib2 и html5lib. Исходя из вашего ответа и ответа Martijn, похоже, что это источник ошибки. По-видимому, вы используете библиотеку запросов (с python-requests.org), чтобы заставить ее работать. Я не знал об этом ресурсе, я буду играть с ним дальше, спасибо! – bmiskie

ответ

2

Это комментарий и doctype, который выдает парсер здесь, а затем, BeautifulSoup.

Даже тег HTML кажется 'ушел':

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

Тем не менее он есть в .contents Iterable еще. Вы можете найти вещи снова:

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