[PYTHON] Pourquoi mon code ne fonctionne pas

Guilgo
2024-03-05 22:04:40

Le 05 mars 2024 à 22:03:03 :

Le 05 mars 2024 à 22:00:33 :

Le 05 mars 2024 à 21:59:49 :
+ go utiliser beautiful soup

J'ai un script entier avec lxml :(

tu fais bien d'utiliser lxml, c'est bien plus rapide que bs4 (même si dans ton cas la vitesse n'est pas critique)

yes mais mon but c'est d'avoir un énorme data set donc je pense que c'est mieux en effet

Tirie14_1
2024-03-05 22:04:41

Le 05 mars 2024 à 22:04:15 DarkSylux a écrit :

Le 05 mars 2024 à 22:03:51 Tirie14_1 a écrit :

Le 05 mars 2024 à 22:02:52 Guilgo a écrit :

Le 05 mars 2024 à 22:01:03 :
Mixtral 8x7B

---

The issue with your code is that the XPath expression you are using to extract the player name is not correct. There is no element with class "player_name" in the HTML content of the page, which is why your html_parse_tree function returns an empty list for player_name.

To fix this issue, you can modify the XPath expression to correctly select the element containing the player name. In this case, the player name is contained within a span element with class "player-name__full".

Here's the corrected code:



from lxml import html
import requests

url = 'https://www.atptour.com/en/players/roger-federer/f324/overview'

def html_parse_tree(url):
page = requests.get(url)
tree = html.fromstring(page.content)
return tree

player_name = html_parse_tree(url).xpath('//span[@class="player-name__full"]/text()')[0]

print("Player Name :", player_name)

This should output the following:

Player Name : Roger Federer

---

Chat-GPT 4:

Votre script Python tente d'extraire le nom d'un joueur à partir de sa page de profil sur le site ATP Tour en utilisant la bibliothèque lxml pour analyser le HTML. Il semble y avoir plusieurs problèmes potentiels avec le code tel qu'il est fourni. Je vais aborder les corrections étape par étape.

Indentation incorrecte: Python est très strict sur l'indentation puisqu'elle définit la structure du bloc de code. Votre fonction html_parse_tree n'est pas correctement indentée.

Sélecteur XPath incorrect: Le sélecteur XPath que vous utilisez pour extraire le nom du joueur semble incorrect. Les sélecteurs doivent correspondre exactement à la structure du HTML de la page ciblée. Il est très probable que la structure de la page ait changé ou que le sélecteur ait été mal identifié dès le début.

Je vais corriger l'indentation et ajuster le code pour utiliser un sélecteur XPath plus générique, mais notez que sans accès direct au site et sans connaître sa structure actuelle, le sélecteur exact pourrait nécessiter un ajustement.



from lxml import html
import requests

url = 'https://www.atptour.com/en/players/roger-federer/f324/overview'

def html_parse_tree(url):
page = requests.get(url)
tree = html.fromstring(page.content)
return tree

# Cette ligne utilise un sélecteur hypothétique. Vous devrez peut-être ajuster le sélecteur XPath en fonction de la structure actuelle de la page.
player_name = html_parse_tree(url).xpath('//div[contains(@class, "player-profile")]/h1/text()')

# Vérifier si player_name contient un résultat avant d'essayer d'accéder au premier élément
if player_name:
print("Nom du joueur :", player_name[0])
else:
print("Nom du joueur introuvable")

Dans ce code, j'ai supposé un sélecteur XPath générique basé sur une structure hypothétique de la page. Vous devrez peut-être inspecter la page web pour trouver le bon sélecteur. Utilisez les outils de développement de votre navigateur (généralement accessibles via F12 ou clic droit -> Inspecter) pour voir la structure HTML de la page et ajuster le sélecteur XPath en conséquence.

Si vous avez accès à la page et que vous pouvez vérifier la structure HTML, vous devriez ajuster la partie .xpath('//div[contains(@class, "player-profile")]/h1/text()') avec le sélecteur correct qui correspond au nom du joueur dans le HTML.

les deux codes me renvoie une erreur, index [0] n'existe pas, car la liste est vide ...

Après, je n'y connais rien en Pythonhttps://image.noelshack.com/fichiers/2016/30/1469541952-risitas182.png

Et en cobra ?https://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png

Plus en Langue2Vipèrehttps://image.noelshack.com/fichiers/2017/19/1494343590-risitas2vz-z-3x.png

Guilgo
2024-03-05 22:05:00

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

MikeBloomberg
2024-03-05 22:07:14

Presque sur que les 3/4 des données sur la page sont chargees dynamiquement avec du javascript. Avec cette requete, tu ne recuperes que le squelette de la page: le contenu est manquant.

Si tu veux faire ca correctement, il va falloir passer par un framework du type Selenium/Playwright.

Guilgo
2024-03-05 22:07:54

Le 05 mars 2024 à 22:07:14 :
Presque sur que les 3/4 des données sur la page sont chargees dynamiquement avec du javascript. Avec cette requete, tu ne recuperes que le squelette de la page: le contenu est manquant.

Si tu veux faire ca correctement, il va falloir passer par un framework du type Selenium/Playwright.

ah shit... fais chier

Shoganai
2024-03-05 22:08:02

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

Guilgo
2024-03-05 22:08:34

Le 05 mars 2024 à 22:08:02 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

donc impossible de faire du web scrapping sur ce site?

gr6jdgh5FG6R
2024-03-05 22:08:36

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

quand tu fais une requete sur un site il voit trois choses :
- ton ip
- tes headers
- tes cookies

les headers donnent des infos sur ton matériel

exemple d'headers
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', 'Referer': 'https://www.google.com/', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Accept-Encoding': 'gzip, deflate, br', }

Guilgo
2024-03-05 22:08:52

Le 05 mars 2024 à 22:08:02 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

l'URL est bon https://www.atptour.com/en/players/roger-federer/f324/overview

MikeBloomberg
2024-03-05 22:09:48

Le 05 mars 2024 à 22:08:34 :

Le 05 mars 2024 à 22:08:02 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

> Le 05 mars 2024 à 22:01:35 :

>rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

donc impossible de faire du web scrapping sur ce site?

Tu peux, mais en chargeant la page dans un navigateur controle avec Python (comme Selenium/Playwright). C'est bien plus lourd, mais il y a pas 36 solutions.

Guilgo
2024-03-05 22:10:26

Le 05 mars 2024 à 22:08:36 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

Le 05 mars 2024 à 22:01:35 :
rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

quand tu fais une requete sur un site il voit trois choses :
- ton ip
- tes headers
- tes cookies

les headers donnent des infos sur ton matériel

exemple d'headers
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', 'Referer': 'https://www.google.com/', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Accept-Encoding': 'gzip, deflate, br', }

Ok mais à quoi ça sert ? et comment savoir ce que je dois mettre comme header ? à quel moment ça se définit ?

Guilgo
2024-03-05 22:10:56

Le 05 mars 2024 à 22:09:48 :

Le 05 mars 2024 à 22:08:34 :

Le 05 mars 2024 à 22:08:02 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

> Le 05 mars 2024 à 22:04:08 :

>> Le 05 mars 2024 à 22:01:35 :

> >rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

>

> 403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

donc impossible de faire du web scrapping sur ce site?

Tu peux, mais en chargeant la page dans un navigateur controle avec Python (comme Selenium/Playwright). C'est bien plus lourd, mais il y a pas 36 solutions.

bon bah je vais trouver un autre site qui me fournit les mêmes données

Tirie14_1
2024-03-05 22:11:29

Le 05 mars 2024 à 22:07:14 MikeBloomberg a écrit :
Presque sur que les 3/4 des données sur la page sont chargees dynamiquement avec du javascript. Avec cette requete, tu ne recuperes que le squelette de la page: le contenu est manquant.

Si tu veux faire ca correctement, il va falloir passer par un framework du type Selenium/Playwright.

Mixtral semble pourtant avoir réussi à récupérer les infos demandées puisqu'il donne la réponse attendue après son code, dans une sorte de testhttps://image.noelshack.com/fichiers/2017/30/4/1501187858-risitassebestreup.png

gr6jdgh5FG6R
2024-03-05 22:12:48

Le 05 mars 2024 à 22:10:26 :

Le 05 mars 2024 à 22:08:36 :

Le 05 mars 2024 à 22:05:00 :

Le 05 mars 2024 à 22:04:34 :

Le 05 mars 2024 à 22:04:08 :

> Le 05 mars 2024 à 22:01:35 :

>rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

403

tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

quand tu fais une requete sur un site il voit trois choses :
- ton ip
- tes headers
- tes cookies

les headers donnent des infos sur ton matériel

exemple d'headers
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', 'Referer': 'https://www.google.com/', 'DNT': '1', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Accept-Encoding': 'gzip, deflate, br', }

Ok mais à quoi ça sert ? et comment savoir ce que je dois mettre comme header ? à quel moment ça se définit ?

demande à gpt

mais pour ton site tu n'y arriveras pas avec du request, c'est protégé par cloudfare, t'as pas le niveau pour bypass

si vraiment tu veux faire un projet autour de ce site, tu devras le faire en selenium (c'est le nom d'une librairie python)

Azerban
2024-03-05 22:14:00

Suffit d'interroger l'API cachée :

from __future__ import annotations

import httpx


def main() -> int:
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': 'https://www.atptour.com/en/players/roger-federer/f324/overview',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
}

params = {'v': '1'}
response = httpx.get('https://www.atptour.com/en/-/www/players/hero/f324', params=params, headers=headers)
print(response.text)
return 0


if __name__ == '__main__':
raise SystemExit(main())

MikeBloomberg
2024-03-05 22:14:59

Le 05 mars 2024 à 22:10:56 :

Le 05 mars 2024 à 22:09:48 :

Le 05 mars 2024 à 22:08:34 :

Le 05 mars 2024 à 22:08:02 :

Le 05 mars 2024 à 22:05:00 :

> Le 05 mars 2024 à 22:04:34 :

>> Le 05 mars 2024 à 22:04:08 :

> >> Le 05 mars 2024 à 22:01:35 :

> > >rajoute un print(page.status_code) pour voir si t'as autre chose que du 200

> >

> > 403

>

> tu dois rajouter des headers

Explique moi avec des mots simples je suis une tanche

Ton URL mz donne 404, sinon 403 normalement c'est Forbidden donc t'as pas l'autorisation

donc impossible de faire du web scrapping sur ce site?

Tu peux, mais en chargeant la page dans un navigateur controle avec Python (comme Selenium/Playwright). C'est bien plus lourd, mais il y a pas 36 solutions.

bon bah je vais trouver un autre site qui me fournit les mêmes données

Honnetement, Playwright est pas si difficile a utiliser.

Tu vas te heurter au meme probleme avec tous ces sites: le contenu est charge avec du JS aussi pour empecher les petits malins a scraper comme tu souhaitais le faire :hap:

Azerban
2024-03-05 22:15:18

La seule variable à modifier par la suite c'est l'id du jour à passer dans le path de l'url (tu peux le récupérer dans la première requête html).

MoneyIsMoney_
2024-03-05 22:15:50

Le 05 mars 2024 à 21:59:15 :
Demande à ChatGPT

gr6jdgh5FG6R
2024-03-05 22:17:00

Le 05 mars 2024 à 22:14:00 :
Suffit d'interroger l'API cachée :

from __future__ import annotations

import httpx


def main() -> int:
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': 'https://www.atptour.com/en/players/roger-federer/f324/overview',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
}

params = {'v': '1'}
response = httpx.get('https://www.atptour.com/en/-/www/players/hero/f324', params=params, headers=headers)
print(response.text)
return 0


if __name__ == '__main__':
raise SystemExit(main())

ça règle pas le problème du 403

Azerban
2024-03-05 22:18:05

Le 05 mars 2024 à 22:17:00 :

Le 05 mars 2024 à 22:14:00 :
Suffit d'interroger l'API cachée :

from __future__ import annotations

import httpx


def main() -> int:
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:123.0) Gecko/20100101 Firefox/123.0',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
'DNT': '1',
'Sec-GPC': '1',
'Connection': 'keep-alive',
'Referer': 'https://www.atptour.com/en/players/roger-federer/f324/overview',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
}

params = {'v': '1'}
response = httpx.get('https://www.atptour.com/en/-/www/players/hero/f324', params=params, headers=headers)
print(response.text)
return 0


if __name__ == '__main__':
raise SystemExit(main())

ça règle pas le problème du 403

Je n'ai pas de 403.

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    ⚠️ Les archives de novembre sont désormais disponibles.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.