J'essayais de supprimer un site Web pour m'entraîner, mais j'ai continué à obtenir l'erreur HTTP 403 (est-ce que je pense que je suis un robot)?
Voici mon code:
#import requests
import urllib.request
from bs4 import BeautifulSoup
#from urllib import urlopen
import re
webpage = urllib.request.urlopen('http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1').read
findrows = re.compile('<tr class="- banding(?:On|Off)>(.*?)</tr>')
findlink = re.compile('<a href =">(.*)</a>')
row_array = re.findall(findrows, webpage)
links = re.finall(findlink, webpate)
print(len(row_array))
iterator = []
L'erreur que j'obtiens est:
File "C:\Python33\lib\urllib\request.py", line 160, in urlopen
return opener.open(url, data, timeout)
File "C:\Python33\lib\urllib\request.py", line 479, in open
response = meth(req, response)
File "C:\Python33\lib\urllib\request.py", line 591, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python33\lib\urllib\request.py", line 517, in error
return self._call_chain(*args)
File "C:\Python33\lib\urllib\request.py", line 451, in _call_chain
result = func(*args)
File "C:\Python33\lib\urllib\request.py", line 599, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
req
pour plusieursurlopen
appels.Error 404: Access denied
Il est définitivement bloquant à cause de votre utilisation d'urllib basée sur l'agent utilisateur. La même chose m'arrive avec OfferUp. Vous pouvez créer une nouvelle classe appelée AppURLopener qui remplace l'agent utilisateur avec Mozilla.
La source
la source
"Ceci est probablement dû à mod_security ou à une fonction de sécurité de serveur similaire qui bloque les
agents utilisateurs (urllib utilise quelque chose comme python urllib / 3.3.0, il est facilement détecté) "- comme déjà mentionné par Stefano Sanfilippo
Le web_byte est un objet octet renvoyé par le serveur et le type de contenu présent dans la page Web est principalement utf-8 . Par conséquent, vous devez décoder web_byte en utilisant la méthode de décodage.
Cela résout le problème complet alors que j'essayais de supprimer un site Web en utilisant PyCharm
PS -> J'utilise python 3.4
la source
Sur la base de la réponse précédente,
Cela a fonctionné pour moi en prolongeant le délai.
la source
Étant donné que la page fonctionne dans le navigateur et non lors de l'appel dans le programme python, il semble que l'application Web qui sert cette URL reconnaît que vous demandez le contenu non par le navigateur.
Manifestation:
et le contenu de r.txt a une ligne d'état:
Essayez de poster l'en-tête 'User-Agent' qui fausse le client Web.
REMARQUE: la page contient un appel Ajax qui crée la table que vous souhaitez probablement analyser. Vous devrez vérifier la logique javascript de la page ou simplement utiliser le débogueur de navigateur (comme l'onglet Firebug / Net) pour voir quelle URL vous devez appeler pour obtenir le contenu de la table.
la source
Vous pouvez essayer de deux manières. Le détail est dans ce lien .
1) Par pip
2) Si cela ne fonctionne pas, essayez d'exécuter une commande Cerificates.command fournie avec Python 3. * pour Mac: (Accédez à l'emplacement d'installation de python et double-cliquez sur le fichier)
la source
Si vous vous sentez coupable d'avoir simulé l'agent utilisateur comme Mozilla (commentaire dans la première réponse de Stefano), cela pourrait également fonctionner avec un agent utilisateur non-urllib. Cela a fonctionné pour les sites que je référence:
Ma candidature consiste à tester la validité en grattant des liens spécifiques auxquels je me réfère, dans mes articles. Pas un grattoir générique.
la source
Sur la base des réponses précédentes, cela a fonctionné pour moi avec Python 3.7
la source