Как разобрать раздел глоссария на веб-сайте с помощью BeautifulSoup и удалить HTML-теги - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь разобрать эту страницу http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary и получить только

Название, Описание

для каждого раздела и все, без тегов. Я анализирую страницу и пытаюсь найти все теги <title> и <p>, но это не дает правильных результатов.

Я использую Python 2.7 и BeautifulSoup 3-2-0

Вот пример моего кода:

import urllib2, sys
address = sys.argv[1]
html = urlib2.urlopen(http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary).read()
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
def printText(tags):
        for tag in tags:
                if tag._class_==NavigableString:
                        print tag,
                else:
                        printText(tag)
        print ""
printText(soup.findALL("p"))
print "".join(soup.findALL("p", text=re.compile(".")))

1 Ответ

0 голосов
/ 30 сентября 2011

Я не совсем уверен, что вы ищете, но я подозреваю, что вы хотите получить термин и определение с этой страницы.Поиск тегов и

не совсем то, что вам нужно.Вы должны искать атрибуты, которые делают тег уникальным.В этом случае просмотр тега показывает, что существует атрибут класса, который однозначно обозначает термины.Это может быть использовано для выделения нужных вам разделов.Я предлагаю более внимательно изучить документацию для find / findAll.Ниже приведен код, который поможет вам в этом.

from BeautifulSoup import BeautifulSoup
import urllib

url = 'http://www.lib.uts.edu.au/about-uts-library/corporate-information/library-glossary'
soup = BeautifulSoup(urllib.urlopen(url))

paragraphs = [x.parent for x in soup.findAll(name='span',attrs={'class':'definition'}) if x.parent.name == 'p']
for p in paragraphs:
    name = p.find(name='span',attrs={'class':'definition'}).text
    text = p.text.replace(name,'')
    print '-'*80
    print name
    print text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...