2014-09-07 2 views
4

Я пытаюсь извлечь HTML-код таблицы с веб-страницы с помощью BeautifulSoup.Beautiful Soup and Table Scraping - lxml vs html parser

<table class="facts_label" id="facts_table">...</table> 

Я хотел бы знать, почему код ниже работает с "html.parser" и гравюр назад none если я изменю "html.parser" для "lxml".

#! /usr/bin/python 

from bs4 import BeautifulSoup 
from urllib import urlopen 

webpage = urlopen('http://www.thewebpage.com') 
soup=BeautifulSoup(webpage, "html.parser") 
table = soup.find('table', {'class' : 'facts_label'}) 
print table 

ответ

5

Существует специальный пункт в BeautifulSoup документации под названием Differences between parsers говорится, что:

Beautiful Soup представляет один и тот же интерфейс для ряда различных анализаторов, но каждый анализатор отличается. Различные синтаксические анализаторы создадут различные деревья синтаксиса из того же документа. Самые большие различия находятся между анализаторами HTML и синтаксическими анализаторами XML.

Различия становятся ясными в отношении некорректных HTML-документов.

Мораль только в том, что вы должны использовать парсер, который работает в вашем конкретном случае.

Также обратите внимание, что вы всегда должны явно указывать, какой парсер вы используете. Это поможет вам избежать сюрпризов при запуске кода на разных компьютерах или в виртуальных средах.