1
resposta

Web Scraping - criando, escrevendo e salvando csv

Olá, pessoal! Sou novo nos estudos de Data Science e preciso muito da ajuda de vocês. Estava fazendo um projeto de Web Scraping que encontrei num site, mas estou travado no final, na hora de salvar a raspagem em um .csv

Vou colocar o código completo aqui, caso alguem puder me ajudar, agradeceria muito.

#Projeto WebScraping - Citações

import requests
url = "http://quotes.toscrape.com/"
res = requests.get(url)
import pandas as pd
import csv
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'html.parser')

#Number of pages to Scrape

page=10

#Custom URL

URL = f'http://quotes.toscrape.com/page/1/'


for i in range(0,page):

    URL=f"http://quotes.toscrape.com/page/{i}/"

for i in range(0,page):

  res = requests.get(f"http://quotes.toscrape.com/page/{i}/")
  soup = BeautifulSoup(res.text,"html.parser")

  #Finding the Page Length

  length = len(soup.select(".text"))

  #Scraping All the Quotes with author name.

  for j in range(0,length):

      quote = soup.select(".text")[j].get_text().strip()
      author = soup.select('.author')[j].get_text().strip()
      print(author)
      print(quote)

#Criar um arquivo csv com todos os dados

with open('quotes.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(quote)
    writer.writerow(author)

Até a última parte tudo roda certo, os dados são extraídos, até consigo criar o .csv, mas ele não escreve os dados que extraí. Agradeço pela ajuda!

1 resposta

Olá Ramon, tudo bem? Espero que sim!

O que está acontecendo é que a variável quote e author estão sendo sobrescritas a cada iteração do loop e não são armazenadas em nenhuma lista posteriormente. Portanto essas variáveis só ficam com o último valor do loop e não serão armazenadas todas as informações no csv.

Sugiro criar listas para armazenar as informações temporariamente e depois passar para o arquivo csv. A biblioteca pandas é muito útil para criar a tabela e criar o arquivo csv.

Segue o código com as alterações:

#Projeto WebScraping - Citações

import requests
import pandas as pd
from bs4 import BeautifulSoup

#Number of pages to Scrape

page=10

#Custom URL

quotes = []
authors = []

for i in range(0,page):

  res = requests.get(f'http://quotes.toscrape.com/page/{i}/')
  soup = BeautifulSoup(res.text,"html.parser")

  #Finding the Page Length

  length = len(soup.select('.text'))

  #Scraping All the Quotes with author name.

  for j in range(0,length):

      quote = soup.select('.text')[j].get_text().strip()
      author = soup.select('.author')[j].get_text().strip()
      quotes.append(quote)
      authors.append(author)

#Criar um arquivo csv com todos os dados
dados = pd.DataFrame({'Quotes':quotes, 'Authors':authors})
dados.to_csv('quotes.csv', index = False)

Qualquer dúvida estou à disposição.

Bons estudos!