Вопрос

Я пытаюсь собрать базовый HTML-скребок для различных веб-сайтов научных журналов, в частности, пытаясь получить аннотацию или вводный абзац.

Текущий журнал, над которым я работаю, называется Nature, а статью, которую я использовал в качестве образца, можно посмотреть на http://www.nature.com/nature/journal/v463/n7284/abs/nature08715.html.

Однако я не могу убрать аннотацию с этой страницы.Я ищу все, что находится между <p class="lead">...</p> теги, но, похоже, я не могу понять, как их изолировать.Я думал, что это будет что-то простое, например

from BeautifulSoup import BeautifulSoup
import re
import urllib2

address="http://www.nature.com/nature/journal/v463/n7284/full/nature08715.html"
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)

abstract = soup.find('p', attrs={'class' : 'lead'})
print abstract

Используя Python 2.5, BeautifulSoup 3.0.8, запуск этого возвращает 'None'.У меня нет возможности использовать что-либо еще, что необходимо скомпилировать / установить (например, lxml).BeautifulSoup в замешательстве, или это я?

Это было полезно?

Решение

Этот html в значительной степени искажен, и xml.dom.minidom не может быть проанализирован, а синтаксический анализ BeautifulSoup работает плохо.

Я удалил некоторые <!-- ... --> части и снова выполните синтаксический анализ с помощью BeautifulSoup, тогда он кажется лучше и может запускаться soup.find('p', attrs={'class' : 'lead'})

Вот код, который я попробовал

>>> html =re.sub(re.compile("<!--.*?-->",re.DOTALL),"",html)
>>>
>>> soup=BeautifulSoup(html)
>>>
>>> soup.find('p', attrs={'class' : 'lead'})
<p class="lead">The class of exotic Jupiter-mass planets that orb  .....

Другие советы

вот отличный от BS способ получить реферат.

address="http://www.nature.com/nature/journal/v463/n7284/full/nature08715.html"
html = urllib2.urlopen(address).read()
for para in html.split("</p>"):
    if '<p class="lead">' in para:
        abstract=para.split('<p class="lead">')[1:][0]
        print ' '.join(abstract.split("\n"))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top