У меня есть следующий текст в формате HTML.
b'<p><b>Anna Katharina Schaffelhuber</b> (* <a href="/wiki/26._Januar" title="26. Januar">26. Januar</a> <a href="/wiki/1993" title="1993">1993</a> in <a href="/wiki/Regensburg" title="Regensburg">Regensburg</a>) ist eine deutsche <a href="/wiki/Monoskibob" title="Monoskibob">Monoskibobfahrerin</a>. Sie gehört seit April 2017 dem <a href="/wiki/Bundeszollverwaltung#Spitzensportf%C3%B6rderung" title="Bundeszollverwaltung">Zoll-Ski-Team</a> an.<sup class="reference" id="cite_ref-1"><a href="#cite_note-1">[3]</a></sup>\n</p>\n'
с использованием
text = format(BeautifulSoup(p,'html.parser').get_text())
возвращает
'Anna Katharina Schaffelhuber (* 26. Januar 1993 in Regensburg) ist eine deutsche Monoskibobfahrerin. Sie gehört seit April 2017 dem Zoll-Ski-Team an.'
, где format()
- это созданная мной функция, которая удаляет нежелательные части (индексы, разрывы строк и т. Д.). Это работает в 99,9% случаев. Все идет нормально. Мой следующий шаг - извлечение ссылок.
Мой желаемый вывод выглядит примерно так:
hyperlinks : [{ "id : 0,
"name" : "26. Januar",
"link" : "/wiki/26._Januar",
"start" : 32,
"end" : 42 },
{ ... for all the links ... }]
Я думал о разборе необработанного HTML и удалении всех <b>
с, <\b>
с, </a>
с и т. Д. Это кажется очень раздражающим, и я не уверен, смогу ли я поймать все случаи с помощью этого метода.
Я не могу обернуть голову вокруг плавного подхода. Как я могу извлечь start
, end
и link
для каждой гиперссылки с информацией выше?
Возможный дубликат Невозможно получить правильную ссылку в BeautifulSoup
find()
и find_all()
методы не решают проблему для меня. Да, find_all()
вернет список всех hrefs, но мне нужна точная позиция для этого href. Я не могу просто использовать элемент в списке, сопоставить его с текстом и выяснить положение таким образом. Это может быть что-нибудь простое, например «Apple», которое может быть в тексте несколько раз. Но я хочу единственно правильную позицию. Мне нужна должность, потому что я хочу структурировать весь контент Википедии в большую базу данных. Эти гиперссылки - это информация, которую я буду использовать позже. Они помогут мне построить огромный график или сеть из Википедии.
На всякий случай, если кто-то ссылается на дампы вики: они не содержат информации о ссылках и категориях. Кроме того, обработка этих свалок кажется мне очень неудобной и нестабильной, так как обслуживание было прекращено в середине 2000-х годов.