Programmation avec pandas read_html
Bonjour,
J'essaie de charger les infos de ce document html avec pandas.
#lecture et accès à l'url "https://www.sec.gov/Archives/edgar/data/1652044/000165204422000090/goog-20220930.htm" [{"metadata":{"scrolled":true,"trusted":true},"id":"0a690924","cell_type":"code","source":"\n\nSelectedcompany='Alphabet Inc.'\nSelectedreport='10-Q'\n\ncsv=pd.read_csv('C:/Users/Laurent/Desktop/SEC_Files/2022-QTR4.tsv',sep='\\t',lineterminator='\\r',names=None)\ncsv.columns.values[0]='Item'\ncompanyreport=csv[(csv['Item'].str.contains(Selectedcompany))&(csv['Item'].str.contains(Selectedreport))]\nFiling=companyreport['Item'].str.split('|')\nFiling=Filing.to_list()\n\nfor item in Filing[0]:\n if 'html' in item:\n report=item\nurl='https://www.sec.gov/Archives/'+report\n\nmy_header = { \"User-Agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\", \"X-Requested-With\": \"XMLHttpRequest\" }\n\nhtml_page_text = requests.get(url, headers=my_header)\n\n\ndfTables = pd.read_html(html_page_text.text);\ndocument_index=dfTables[0].dropna()\ndocument_name=document_index[document_index['Description'].str.contains(Selectedreport)]\ndocument_name=document_name['Document'].str.split(' ')\ndocument_name=document_name[0][0]\nreport=report.replace('-','').replace('index.html','')\nurl='https://www.sec.gov/Archives/'+report+'/'+document_name\nurl\n\n \n","execution_count":84,"outputs":[{"output_type":"execute_result","execution_count":84,"data":{"text/plain":"'https://www.sec.gov/Archives/edgar/data/1652044/000165204422000090/goog-20220930.htm'"},"metadata":{}}]}] html_page_bilan = requests.get(url, headers=my_header) df = pd.read_html(html_page_bilan.text) for item in df: #pour chaque dataframe BS= (item[0].str.contains('assets')|item[0].str.contains('Retained')) #lorsque dans la première colonne onn trouve un des termes 'assets' ou 'retained' if BS.any(): # C'est vrai Balance_Sheet=item #alors le dataframe est item Balance_Sheet
A voir également:
- Programmation avec pandas read_html
- Application de programmation - Guide
- Programmation envoi sms - Guide
- Programmation binaire - Guide
- Programmation vb - Télécharger - Langages
- Programmation télécommande porte de garage brico depot - Forum Matériel & Système
1 réponse
Bonjour
Il y a beaucoup de choses qui ne vont pas dans ton script.
- l3-l4: Tu n'affectes ni l'URL ni le header dans des variables correspondantes, or tu les utilises pour faire .
- l5: les variables url et headers ne sont pas déclarées.
- l6: il manque import requests
- l7: il manque import pandas as pd. De plus, pandas.read_html s'attend une table HTML, pas une page entière. Il faudrait donc extraire de html_page_bilan chacune des tables qui t'intéressent. Pour cela tu peux utiliser BeautifulSoup.
- l10-l14: le code n'est pas indenté, or en python cela est indispensable de le faire correctement pour que l'interpréteur python comprenne la structure de ton programme.
- l14: cette ligne seule ne sert à rien, peut être voulais-tu écrire print(Balance_Sheet) ?
Je vais délibérément ignorer la partie requests / headers (car sans passer les bons headers tu ne récupères pas le contenu intégral de la page, donc la partie qui contient les tables) et me focaliser dans ce qui suit sur read_html puisque c'est sur ça que porte la discussion.
from bs4 import BeautifulSoup import pandas as pd from pprint import pprint html_data = """<html> <body> <table> <tr> <td>1</td> <td>11</td> </tr> <tr> <td>111</td> <td>1111</td> </tr> </table> <table> <tr> <td>2</td> <td>22</td> </tr> <tr> <td>222</td> <td>2222</td> </tr> </table> </body> </html>""" soup = BeautifulSoup(html_data) dfs = list() for table in soup.find_all("table"): df = pd.read_html(str(table)) dfs.append(df) pprint(dfs)
Résultat :
[[ 0 1
0 1 11
1 111 1111],
[ 0 1
0 2 22
1 222 2222]]
Bonne chance