0
votes

Web grattage avec python: problème avec belle -soup

Aidez-moi s'il vous plaît avec l'utilisation de magnifiquesSoup sur Web racler des valeurs finales de Investing.com à l'aide de Python 3. Quoi que je ne reçois jamais de valeur et que la classe de fichiers change de manière permanente de la page Web est une valeur en direct.

<html>
<head>
<title>403 You are banned from this site.  Please contact via a different client configuration if you believe that this is a mistake.                                </title>
</head>
<body>
<h1>Error 403 You are banned from this site.  Please contact via a different client configuration if you believe that this is a mistake.</h1>
<p>You are banned from this site.  Please contact via a different client configuration if you believe that this is a mistake.</p>
<h3>Guru Meditation:</h3>
<p>XID: 850285196</p>
<hr/>
<p>Varnish cache server</p>
</body>
</html>


0 commentaires

3 Réponses :


1
votes

On dirait que le site Web détecte l'endroit où la demande provient, nous devons donc «le faire tromper» en pensant que nous sommes sur un navigateur.

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

r = Request("https://es.investing.com/indices/spain-35-futures", headers={"User-Agent": "Mozilla/5.0"})
c = urlopen(r).read()
soup = BeautifulSoup(c, "html.parser")
print(soup)


0 commentaires

1
votes

Le serveur Web détecte le script Python comme un bot et les bloque donc. En utilisant des en-têtes, vous pouvez l'empêcher et le code suivant le fait:

import requests
from bs4 import BeautifulSoup

url = "https://es.investing.com/indices/spain-35-futures"

header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36'}
page=requests.get(url,headers=header)

soup=BeautifulSoup(page.content,'html.parser')
#this soup returns <span class="arial_26 inlineblock pid-8828-last" dir="ltr" id="last_last">9.182,5</span>

result = soup.find('span',attrs={'id':'last_last'}).get_text()
#use the get_text() function to extract the text

print(result)


0 commentaires

0
votes

Vous pouvez essayer d'utiliser le pilote Web Selenium. Comme autrement, vous ferez face à cette chose plus si le nombre de demandes est élevé. En outre, il existe parfois un problème avec des sites ayant JavaScript. XXX


0 commentaires