Estaba tratando de eliminar un sitio web para practicar, pero seguí obteniendo el error HTTP 403 (¿cree que soy un bot)?
Aquí está mi código:
#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 = []
El error que obtengo es:
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
para variasurlopen
llamadas.Error 404: Access denied
Definitivamente está bloqueando debido a su uso de urllib basado en el agente de usuario. Lo mismo me está pasando con OfferUp. Puede crear una nueva clase llamada AppURLopener que anula el agente de usuario con Mozilla.
Fuente
fuente
"Esto probablemente se deba a mod_security o alguna característica de seguridad del servidor similar que bloquea
agentes de usuario (urllib usa algo como python urllib / 3.3.0, se detecta fácilmente) "- como ya lo mencionó Stefano Sanfilippo
El web_byte es un objeto de byte devuelto por el servidor y el tipo de contenido presente en la página web es principalmente UTF-8 . Por lo tanto, necesita decodificar web_byte usando el método de decodificación.
Esto resuelve el problema completo mientras intentaba eliminar de un sitio web usando PyCharm
PD -> uso Python 3.4
fuente
Basado en la respuesta anterior,
Esto funcionó para mí al extender el tiempo de espera.
fuente
Dado que la página funciona en el navegador y no cuando se llama dentro del programa Python, parece que la aplicación web que sirve esa url reconoce que usted solicita el contenido no por el navegador.
Demostración:
y el contenido en r.txt tiene una línea de estado:
Intente publicar el encabezado 'User-Agent' que falsifica el cliente web.
NOTA: La página contiene una llamada Ajax que crea la tabla que probablemente desee analizar. Deberá verificar la lógica javascript de la página o simplemente usar el depurador del navegador (como la pestaña Firebug / Net) para ver a qué URL debe llamar para obtener el contenido de la tabla.
fuente
Puedes intentarlo de dos formas. El detalle está en este enlace .
1) vía pip
2) Si no funciona, intente ejecutar un comando Cerificates.com que viene incluido con Python 3. * para Mac: (Vaya a su ubicación de instalación de Python y haga doble clic en el archivo)
fuente
Si se siente culpable por fingir que el agente de usuario es Mozilla (comente en la respuesta principal de Stefano), también podría funcionar con un agente de usuario que no sea de urllib. Esto funcionó para los sitios a los que hago referencia:
Mi aplicación es para probar la validez raspando enlaces específicos a los que me refiero en mis artículos. No es un raspador genérico.
fuente
Según las respuestas anteriores, esto me ha funcionado con Python 3.7
fuente