Подтвердить что ты не робот

Извлечение данных из HTML файлов с помощью BeautifulSoup и Python

Мне нужно извлечь данные из HTML файлов. Эти файлы, скорее всего, автоматически генерируются. Я загрузил код одного из этих файлов в Pastebin: http://pastebin.com/9Nj2Edfv. Это ссылка на фактическую страницу: http://eur-lex.europa.eu/Notice.do?checktexts=checkbox&val=60504%3Acs&pos=1&page=1&lang=en&pgs=10&nbl=1&list=60504%3Acs%2C&hwords=&action=GO&visu=%23texte

Данные, которые нужно извлечь, можно найти в разных рубриках.

Это то, что у меня есть до сих пор:

from BeautifulSoup import BeautifulSoup
ecj_data = open("data\ecj_1.html",'r').read()

soup = BeautifulSoup(ecj_data)

celex = soup.find('h1')
auth_lang = soup('ul', limit=14)[13].li
procedure = soup('ul', limit=20)[17].li

print "Celex number:", celex.renderContents(),
print "Authentic language:", auth_lang
print "Type of procedure:", procedure

У меня есть все данные, хранящиеся локально, и именно поэтому он открывает файл ecj_1.html.

Число Celex и язык аутентификации работают несколько хорошо.

celex возвращает

"Celex number: 
61977J0059"

auth_lang возвращает "Authentic language: <li>French</li>"

Мне нужно только содержимое тега h1 (а не разрыв в конце).

[Кроме того, мне нужно, чтобы auth_lang возвращал только "французский", а не <li> -tags.] Это уже не проблема. Я понял, что могу просто добавить ".text" в конец "auth_lang".

Процедура с другой стороны возвращает это:

    Type of procedure: <li>
    <strong>Type of procedure:</strong>
    <br />
    Reference for a preliminary ruling
    </li>

что совершенно неверно, так как мне просто нужно вернуть "Ссылка на предварительное постановление".

Есть ли способ достичь этого?

Второе редактирование: Я заменил celex = soup.find('h1') на celex = soup('h1', limit=2)[0] и добавил .text в print celex.

4b9b3361

Ответ 1

Содержимое каждой из найденных последовательностей является списком, только первые два являются длиной 1. Однако procedure составляет 5 элементов длиной, а запись, которую вы после (в этом случае), занимает 4-е место. Я использовал splitlines(), чтобы избавиться от новых строк.

print "Celex number:", celex.contents[0].splitlines()[1]
print "Authentic language:", auth_lang.contents[0].splitlines()[0]
print "Type of procedure:", procedure.contents[4].splitlines()[1]

выход:

Celex number: 61977J0059
Authentic language: French
Type of procedure: Reference for a preliminary ruling