Issue
I´m trying to parse a bible online, to scrape all books (book with Title, Chapters and Verses), and then exporta all using pandas.
But I´m too newer and just can export all text in one row and colum.
Here is the website: https://www.bibliaonline.com.br/ara/mt/1 (This is the url im trying)
Here is the code:
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
from XanXSS.lib.settings import prettify
#Usando agent bypassing block-url browser
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
# Link para extrair os dados
def getdata(url):
r = requests.get(url)
return r.text
url = getdata(f"https://www.bibliaonline.com.br/ara/mt/1")
soup = BeautifulSoup(url, 'html.parser')
resultado = soup.find_all('div', class_="verseByVerse css-188hggs")
for resultado in resultado:
espaco = soup.find('span', class_="bv")
numero = soup.find_all('span', class_="v")
verso = soup.find_all('span', class_="t")
print(resultado.get_text())
#Armazena a informação no dataform do pandas
df = pd.DataFrame(data=[[resultado.text]], columns=['Biblia'], index=['Mateus'])
# Adiciona um tempo de delay, entre cada requisição evitando inundar o site com requisições.
time.sleep(1)
#Exporta os dados para um arquivo CSV
df.to_csv('bibliatetelestai.csv', index=True)
I´m getting this result:
A genealogia de Jesus Cristo1 Livro da genealogia de Jesus Cristo, filho de Davi, filho de Abraão. 2 Abraão gerou a Isaque; Isaque, a Jacó; Jacó, a Judá e a seus irmãos; 3 Judá gerou de Tamar a Perez e a Zera; Perez gerou a Esrom; Esrom, a Arão; 4 Arão gerou a Aminadabe; Aminadabe, a Naassom; Naassom, a Salmom; 5 Salmom gerou de Raabe a Boaz; este, de Rute, gerou a Obede; e Obede, a Jessé; 6 Jessé gerou ao rei Davi; e o rei Davi, a Salomão, da que fora mulher de Urias; 7 Salomão gerou a Roboão; Roboão, a Abias; Abias, a Asa; 8 Asa gerou a Josafá; Josafá, a Jorão; Jorão, a Uzias; 9 Uzias gerou a Jotão; Jotão, a Acaz; Acaz, a Ezequias; 10 Ezequias gerou a Manassés; Manassés, a Amom; Amom, a Josias; 11 Josias gerou a Jeconias e a seus irmãos, no tempo do exílio na Babilônia. 12 Depois do exílio na Babilônia, Jeconias gerou a Salatiel; e Salatiel, a Zorobabel; 13 Zorobabel gerou a Abiúde; Abiúde, a Eliaquim; Eliaquim, a Azor; 14 Azor gerou a Sadoque; Sadoque, a Aquim; Aquim, a Eliúde; 15 Eliúde gerou a Eleazar; Eleazar, a Matã; Matã, a Jacó. 16 E Jacó gerou a José, marido de Maria, da qual nasceu Jesus, que se chama o Cristo. 17 De sorte que todas as gerações, desde Abraão até Davi, são catorze; desde Davi até ao exílio na Babilônia, catorze; e desde o exílio na Babilônia até Cristo, catorze. O nascimento de Jesus Cristo18 Ora, o nascimento de Jesus Cristo foi assim: estando Maria, sua mãe, desposada com José, sem que tivessem antes coabitado, achou-se grávida pelo Espírito Santo. 19 Mas José, seu esposo, sendo justo e não a querendo infamar, resolveu deixá-la secretamente. 20 Enquanto ponderava nestas coisas, eis que lhe apareceu, em sonho, um anjo do Senhor, dizendo: José, filho de Davi, não temas receber Maria, tua mulher, porque o que nela foi gerado é do Espírito Santo. 21 Ela dará à luz um filho e lhe porás o nome de Jesus, porque ele salvará o seu povo dos pecados deles. 22 Ora, tudo isto aconteceu para que se cumprisse o que fora dito pelo Senhor por intermédio do profeta: 23 Eis que a virgem conceberá e dará à luz um filho, e ele será chamado pelo nome de Emanuel (que quer dizer: Deus conosco). 24 Despertado José do sono, fez como lhe ordenara o anjo do Senhor e recebeu sua mulher. 25 Contudo, não a conheceu, enquanto ela não deu à luz um filho, a quem pôs o nome de Jesus.
How can I export the print, line by line, like this:
A genealogia de Jesus Cristo (Title of verse)
1 Livro da genealogia de Jesus Cristo, filho de Davi, filho de Abraão.
2 Abraão gerou a Isaque; Isaque, a Jacó; Jacó, a Judá e a seus irmãos;
3 Judá gerou de Tamar a Perez e a Zera; Perez gerou a Esrom; Esrom, a Arão;
etc...
and export this one line per row?
Solution
CSV is not predestined for such an output with headlines, but to output the verses line by line you can extract them in exactly this way and store them
Example
...
soup = BeautifulSoup(url, 'html.parser')
versos = soup.select('div.verseByVerse p span.t')
data = []
for e in versos:
data.append({
'espaco': e.find_previous('div').get_text(strip=True),
'numero': e.find_previous('span').get_text(strip=True),
'verso': e.get_text(strip=True)
})
#Armazena a informação no dataform do pandas
pd.DataFrame(data=data)
espaco | numero | verso |
---|---|---|
A genealogia de Jesus Cristo | 1 | Livro da genealogia de Jesus Cristo, filho de Davi, filho de Abraão. |
A genealogia de Jesus Cristo | 2 | Abraão gerou a Isaque; Isaque, a Jacó; Jacó, a Judá e a seus irmãos; |
A genealogia de Jesus Cristo | 3 | Judá gerou de Tamar a Perez e a Zera; Perez gerou a Esrom; Esrom, a Arão; |
A genealogia de Jesus Cristo | 4 | Arão gerou a Aminadabe; Aminadabe, a Naassom; Naassom, a Salmom; |
Answered By - HedgeHog
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.