Создание нескольких текстовых файлов из XML-вывода с использованием Python и BeautifulSoup - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть страница XML, которую я хочу разделить на разделы, а затем взять текст из каждого из разделов и разделить их в файл .txt с сохраненным именем, начиная с 001 и заканчивая 099. Например, я хочу всераздела 1 в файле с именем 001 и всего раздела 2 в файле с именем 002 и так далее.Это то, что у меня пока есть:

import bs4 as bs
import urllib.request

source = urllib.request.urlopen('https://www.govinfo.gov/bulkdata/CFR/2018/title-49/CFR-2018-title49-vol1.xml/').read()

soup = bs.BeautifulSoup(source,'lxml')

for paragraph in soup.find_all('section'):
print(paragraph.string)
print(str(paragraph.text))

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

1 Ответ

0 голосов
/ 12 февраля 2019

Чтобы сгруппировать все разделы вместе, вы можете использовать функцию Python groupby().Для этого требуется функция, которая извлекает номер раздела из абзаца.Затем функция groupby создает список всех абзацев с одинаковым номером раздела и возвращает их вместе:

from itertools import groupby
import bs4 as bs
import urllib.request

def section(paragraph):
    return paragraph.sectno.text.strip('§ ').split('.')[0]


source = urllib.request.urlopen('https://www.govinfo.gov/bulkdata/CFR/2018/title-49/CFR-2018-title49-vol1.xml/').read()
soup = bs.BeautifulSoup(source, 'lxml')

for section_number, paragraphs in groupby(soup.find_all('section'), section):
    filename = f'Section {int(section_number):02}.txt'

    with open(filename, 'w', encoding='utf-8') as f_output:
        section_text = '\n-------------\n'.join(p.text for p in paragraphs)
        f_output.write(section_text)

Здесь файлы будут выглядеть следующим образом:

Section 01.txt
Section 03.txt
Section 05.txt
Section 06.txt
Section 07.txt
Section 08.txt
...
Section 10.txt
Section 80.txt
Section 89.txt
Section 91.txt
Section 92.txt
Section 93.txt
Section 98.txt
Section 99.txt

Каждый абзац также разделенс маленькой строчкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...