Выберите несколько элементов с BeautifulSoup и управляйте ими индивидуально - PullRequest
0 голосов
/ 19 февраля 2019

Я использую BeautifulSoup для разбора веб-страницы стихов.Поэзия разделена на h3 для названия стихотворения и .line для каждой строки стихотворения.Я могу получить оба элемента и добавить их в список.Но я хочу манипулировать h3 в верхнем регистре и указывать разрыв строки, а затем вставить его в список строк.

    linesArr = []
    for lines in full_text:
        booktitles = lines.select('h3')
        for booktitle in booktitles:
            linesArr.append(booktitle.text.upper())
            linesArr.append('')
        for line in lines.select('h3, .line'):
            linesArr.append(line.text)

Этот код добавляет все названия книг в начало списка, а затем продолжает получать элементы h3 и .line.Я попытался вставить код следующим образом:

    linesArr = []
    for lines in full_text:
        for line in lines.select('h3, .line'):
            if line.find('h3'):
                linesArr.append(line.text.upper())
                linesArr.append('')
            else:
                linesArr.append(line.text)

1 Ответ

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

Я не уверен, что вы пытаетесь сделать, но вот так вы можете получить массив с заголовком в верхнем регистре и всей вашей строкой:

#!/usr/bin/python3
# coding: utf8

from bs4 import BeautifulSoup
import requests

page = requests.get("https://quod.lib.umich.edu/c/cme/CT/1:1?rgn=div2;view=fulltext")
soup = BeautifulSoup(page.text, 'html.parser')

title = soup.find('h3')
full_lines = soup.find_all('div',{'class':'line'})

linesArr = []
linesArr.append(title.get_text().upper())
for line in full_lines:
    linesArr.append(line.get_text())

# Print full array with the title and text
print(linesArr)

# Print text here with line break
for linea in linesArr:
    print(linea + '\n')
...