Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Loop de URL

Eu estou tentando fazer um Loop na URL passando uma lista de valores, mas estou fazendo alguma coisa errada. Eu tentei criar uma lista em ticker com os valores ['ENBR3', 'ITSA4', 'BBAS3'] e rodar com o for na Url, mas acho que fiz besteira. Estou pesquisando na Web. Mas se alguém souber eu agradeço.

from urllib.request import Request, urlopen, urlretrieve
from urllib.error import URLError, HTTPError
from bs4 import BeautifulSoup
import pandas as pd


ticker ="ENBR3"

url = 'https://statusinvest.com.br/acoes/'+ ticker
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')

card = []
cards = {}

cards['01 - Sigla'] = soup.find("h1", class_="lh-4").get_text()
cards['02 - Valor'] = soup.find_all("strong", class_="value")[0].get_text()
cards['03 - DY'] = soup.find("strong", class_="value d-block lh-4 fs-4 fw-700").get_text()
cards['04 - P/L'] = soup.find_all("strong", class_="value d-block lh-4 fs-4 fw-700")[1].get_text()
card.append(cards)

card
3 respostas

Eu entendo como fazer uma lista de URL por exemplo, como abaixo:,

tickers = ['ITSA4', 'ENBR3', 'BBAS3']
url = 'https://statusinvest.com.br/acoes/'

for i in tickers:
  print(url+i)

Minha dificuldade é passar essa lista em cada leitura para a aplicação fazer o scrap.

solução!

Toda vez que você atualizar a pagina você precisa atualizar o soup

tente algo como:


for i in tickers:
    req = Request(url+i, headers = headers)
    response = urlopen(req)
    html = response.read().decode('utf-8')
    soup = BeautifulSoup(html, 'html.parser')

Muito obrigado por tentar me ajudar Henrique Martinelli. Mas não funcionou. O Colaboratory aponta erro na linha:

cards['01 - Sigla'] = soup.find("h1", class_="lh-4").get_text()