Soucis scrapping

Fermé
Raydoudou - Modifié le 12 juil. 2022 à 23:37
mamiemando Messages postés 33490 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 24 janvier 2025 - 13 juil. 2022 à 00:03

Bonjour à tous,

Excusez-moi de vous déranger, j'ai un soucis.

En effet j'essaye de scrapper la page de yahoo finance, et lorsque je récupère les valeurs qui m'intéressent, elles sont bien au format string. Mais lorsque je les ajoute à une liste, elles passent sous une forme inconnue (voir screen). Seriez-vous capable de m'aider ou au moins de me dire qu'est-ce que ce type d'écriture dans ma liste. 

Merci d'avance.

import requests
from bs4 import BeautifulSoup
def get_page(Entreprise):
    l=[]
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'}
    """Download a webpage and return a beautiful soup doc"""
    response = requests.get('https://fr.finance.yahoo.com/quote/{0}/balance-sheet?p=%7B0%7D'.format(Entreprise), headers= headers)
    if not response.ok:
        print('Status code:', response.status_code)
        raise Exception('Failed to load page {}'.format('https://fr.finance.yahoo.com/quote/{0}/balance-sheet?p=%7B0%7D'.format(Entreprise)))
    page_content = response.text
    doc = BeautifulSoup(page_content, 'html.parser')
    print(doc.find('title'))
    div_gris = doc.find_all('div', {'class': "Ta(c) Py(6px) Bxz(bb) BdB Bdc($seperatorColor) Miw(120px) Miw(100px)--pnclg Bgc($lv1BgColor) fi-row:h_Bgc($hoverBgColor) D(tbc)"})
    for item in div_gris:    
        res=item.find('span')
        if res is not None:
            res1=res.text
        else:
            res1=None
        l.append(res1)
        print (res1, type(res1))
        """notstring = item.find('span')
        print (notstring)
        string= str(notstring)
        res = re.sub("\</span>|\<span>","",string)
        l.append(res)"""
    print (l)


            


Windows / Chrome 103.0.0.0

2 réponses

jordane45 Messages postés 38392 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 janvier 2025 4 731
10 juil. 2022 à 18:23

Bonjour,

Essaye

 if res is not None:
      res1=res.text
 else:
      res1="None"
 l.append(str(res1))

0
mamiemando Messages postés 33490 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 24 janvier 2025 7 817
Modifié le 13 juil. 2022 à 00:08

Bonjour,

Merci de soigner l'orthographe et surtout, merci d'éviter les captures d'écran, qui ne sont pratiques pour personne (un bon vieux copier coller sera plus lisible et plus écologique).

La chaîne de caractère que tu récupères semble impliquer des caractères unicode. Comment appelles-tu get_page ? Car quand je teste, div_gris ne contient rien. J'ai l'impression que ce que tu veux écrire c'est plutôt ça :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
from pprint import pprint

def get_page(entreprise):
    """Download a webpage and return a beautiful soup doc"""
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36"
    }
    response = requests.get("https://fr.finance.yahoo.com/quote/{0}/balance-sheet?p=%7B0%7D".format(entreprise), headers= headers)
    if not response.ok:
        print("Status code:", response.status_code)
        raise Exception("Failed to load page {}".format("https://fr.finance.yahoo.com/quote/{0}/balance-sheet?p=%7B0%7D".format(entreprise)))
    page_content = response.text
    doc = BeautifulSoup(page_content, "html.parser")
    trs = doc.find("table", {"class" : "lookup-table"}).find_all("tr")
    ths = [
        th.text 
        for tr in trs
        for th in tr.find_all("th")
    ]
    rows = [
        {
            th : td.text
            for (th, td) in zip(ths, tr.find_all("td"))
        }
        for tr in trs
    ]
    return rows

pprint(get_page("orange"))

Bonne chance

0