2015-04-24 3 views
0

Я пытаюсь написать скрипт Python для обработки всего joyo kanji. Однако мой скрипт получает только первые 504 элемента таблицы. Полная таблица имеет 2136 элементов. Этот сценарий демонстрирует проблему:BeautifulSoup обрезает таблицу

from bs4 import BeautifulSoup 
from urllib2 import urlopen 

url = "http://en.wikipedia.org/wiki/List_of_j%C5%8Dy%C5%8D_kanji" 
soup = BeautifulSoup(urlopen(url)) 

print soup.prettify() 

Последний элемент это показывает, из таблицы является:

<tr> 
    <td> 
    504 
    </td> 
    <td style="font-size:2em"> 
    <a href="//"> 
    </a> 
    </td> 
    </tr> 
</table> 

Однако, когда я смотрю на эту таблицу в хроме, я вижу это для элемента 504

<tr> 
<td>504</td> 
<td style="font-size:2em"> 
<a href="//en.wiktionary.org/wiki/%E6%BF%80" class="extiw" title="wikt:激">激</a> 
</td> 
... 

Я ожидал, что последним элементом таблицы будет элемент 2 136.

+0

Я не могу воспроизвести это. Какую ОС вы используете, и у вас установлен lxml? Что происходит, когда вы используете 'BeautifulSoup (urlopen (url), 'html.parser')' вместо этого? –

+0

@MartijnPieters Получение того же результата, что и OP, когда не используется 'html.parser'. Я на OSX и имею lxml. – fixxxer

+0

Добавление 'html.parser' решило это! Спасибо Martijn! Если вы напишете это как ответ, я буду отмечать его как правильное. – Ari

ответ

1

Похоже, что у вас есть сломанная версия lxml или libxml (фактическая библиотека C, выполняющая разбор).

Страница обрабатывает только штрафы для меня на Python 2.7.9 с lxml 3.4.2 и libxml2 версии 2.9.0.

Вы можете сказать, BeautifulSoup использовать стандартную библиотеку парсер с:

soup = BeautifulSoup(urlopen(url), 'html.parser') 

См Installing a parser о последствиях переключения анализаторов.

Смежные вопросы