BeautifulSoup не может получить доступ к содержимому тега <text>

1

Я использую BeautifulSoup (версия 4.4) для предварительной обработки текстового указателя Wikipedia с https://dumps.wikimedia.org/enwiki/ для дальнейшего разбора.

Документ textdump содержит несколько статей, каждый из которых содержится в <page>.

К сожалению, что-то о структуре документа кажется несовместимым с BeautifulSoup: внутри каждой <page> текстовое тело статьи содержится в блоке <text>:

<text xml:space="preserve">...</text>

Как только я выбрал определенный блок <page>, я должен иметь доступ к содержимому текстового блока как page.text.string.

В BeautifulSoup .text используется для резервирования содержимого тега между его скобками. В более поздних версиях для этого используется .string.

К сожалению, похоже, что page.text по-прежнему интерпретируется так же, как и page.string для обратной совместимости. (Edit: getattr(page, "text") делает то же самое.)

Есть ли способ обойти это и получить доступ к тегу HTML с именем <text>?

(Изменение: пример синтаксиса см. В https://pastebin.com/WQvJn0gf.)

  • 0
    Пожалуйста, укажите точный URL страницы, которую вы пытаетесь проанализировать. Указанная вами ссылка не содержит тегов <text> .
  • 0
    @DeepSpace Вот пример синтаксиса: pastebin.com/WQvJn0gf (на самом деле я анализирую dumps.wikimedia.org/enwiki/latest/… , что составляет 595 (несжатый) МБ текста, так что это не подходит.)
Показать ещё 4 комментария
Теги:
tags
parsing
beautifulsoup
html-parsing

1 ответ

0
Лучший ответ

Использование .find и .text работает так, как ожидалось:

from bs4 import BeautifulSoup

string = '''<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
  <siteinfo>...</siteinfo>
  <page>
    <title>AccessibleComputing</title>
    <ns>0</ns>
    <id>10</id>
    <redirect title="Computer accessibility" />
    <revision>
      <id>854851586</id>
      <parentid>834079434</parentid>
      <timestamp>2018-08-14T06:47:24Z</timestamp>
      <contributor>
        <username>Godsy</username>
        <id>23257138</id>
      </contributor>
      <comment>remove from category for seeking instructions on rcats</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text xml:space="preserve">#REDIRECT [[Computer accessibility]]

{{R from move}}
{{R from CamelCase}}
{{R unprintworthy}}</text>
      <sha1>42l0cvblwtb4nnupxm6wo000d27t6kf</sha1>
    </revision>
  </page>
...
</mediawiki>'''

soup = BeautifulSoup(string, 'html.parser')   
page_tag = soup.find('page')
text_tag = page_tag.find('text')
print(text_tag.text)
# #REDIRECT [[Computer accessibility]]

# {{R from move}}
# {{R from CamelCase}}
# {{R unprintworthy}}
  • 0
    Большое спасибо, что делает свое дело.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню