¿Cómo utilizar las solicitudes de Python para falsificar una visita al navegador?
127
Quiero obtener el contenido del siguiente sitio web. Si utilizo un navegador como Firefox o Chrome, podría obtener la página del sitio web real que quiero, pero si uso el paquete de solicitudes de Python (o wgetcomando) para obtenerla, devuelve una página HTML totalmente diferente. Pensé que el desarrollador del sitio web había hecho algunos bloqueos para esto, así que la pregunta es:
¿Cómo falsifico una visita al navegador usando solicitudes de Python o el comando wget?
Como nota al margen, hay un paquete de terceros bastante útil llamado fake-useragent que proporciona una buena capa de abstracción sobre los agentes de usuario:
agente falso
Faker simple de useragent actualizado con base de datos del mundo real
Manifestación:
>>>from fake_useragent importUserAgent>>> ua =UserAgent()>>> ua.chrome
u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'>>> ua.random
u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'
gracias por su respuesta, intenté con los encabezados en mis solicitudes pero aún no pude obtener el contenido real de la página, hay una cadena 'Su navegador web debe tener JavaScript habilitado para que esta aplicación se muestre correctamente'. en la página html devuelta, ¿debo agregar compatibilidad con scripts java en las solicitudes? Si es así, ¿cómo haría eso?
user1726366
8
@ user1726366: No puede simplemente agregar compatibilidad con JavaScript; necesita un intérprete de JavaScript para eso. El enfoque más simple es usar el intérprete de JavaScript de un navegador web real, pero puede automatizarlo desde Python usando Selenium .
PM 2 Ring
1
@ alecxe, @ sputnick: Traté de capturar los paquetes con wirehark para comparar la diferencia con el uso de solicitudes de Python y el navegador, parece que la URL del sitio web no es estática, tengo que esperar a que se complete el procesamiento de la página, así que suena Selenium las herramientas adecuadas para mí. Gracias por su amable ayuda. :)
user1726366
4
@ user1726366 Sí, si el uso de un navegador real + selenio se adapta a sus necesidades, este es el enfoque más sencillo. Tenga en cuenta que puede utilizar un PhantomJSnavegador sin cabeza con selenio. Gracias. (no olvide aceptar la respuesta si fue útil)
alecxe
Resulta que algunos motores de búsqueda filtran algunos UserAgent. ¿Alguien sabe por qué? ¿Alguien podría proporcionar una lista de mensajes aceptables UserAgent?
from fake_useragent importUserAgentimport requests
ua =UserAgent()print(ua.chrome)
header ={'User-Agent':str(ua.chrome)}print(header)
url ="https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
htmlContent = requests.get(url, headers=header)print(htmlContent)
salida:
Mozilla/5.0(Macintosh;IntelMac OS X 10_8_2)AppleWebKit/537.17(KHTML, like Gecko)Chrome/24.0.1309.0Safari/537.17{'User-Agent':'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}<Response[200]>
404 es un error diferente, ¿está seguro de que puede navegar por la página con un navegador?
Umesh Kaushik
Absolutamente. Siento que el sitio web que intento utilizar bloqueó todas las direcciones IP de Amazon EC2.
Maksim Kniazev
¿Podría hacer ping al enlace aquí? Puedo intentarlo al final. Además, si la IP está bloqueada, el código de error debe ser 403 (prohibido) o 401 (no autorizado). Hay sitios web que no permiten raspar en absoluto. Además, muchos sitios web utilizan cloudflare para evitar que los bots accedan al sitio web.
Umesh Kaushik
Aquí está mi enlace regalbloodline.com/music/eminem . Funcionó bien antes. Dejó de trabajar en Python 2. Trabajó en Python 3 en la máquina local. Pasar a AWS EC2 no funcionó allí. Seguí recibiendo el error 404. Luego dejó de funcionar en la máquina local también. El uso de la emulación del navegador funcionó en la máquina local pero no en EC2. Al final me di por vencido y encontré un sitio web alternativo para raspar. Por cierto, ¿se podría evitar el fuego de nubes?
Maksim Kniazev
7
Intente hacer esto, usando Firefox como agente de usuario falso (además, es un buen script de inicio para raspado web con el uso de cookies):
#!/usr/bin/env python2# -*- coding: utf8 -*-# vim:ts=4:sw=4import cookielib, urllib2, sys
def doIt(uri):
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
page = opener.open(uri)
page.addheaders =[('User-agent','Mozilla/5.0')]print page.read()for i in sys.argv[1:]:
doIt(i)
La raíz de la respuesta es que la persona que hace la pregunta necesita tener un intérprete de JavaScript para obtener lo que busca. Lo que encontré es que puedo obtener toda la información que quería en un sitio web en json antes de que fuera interpretada por JavaScript. Esto me ha ahorrado un montón de tiempo en lo que sería analizar html con la esperanza de que cada página web tenga el mismo formato.
Entonces, cuando obtenga una respuesta de un sitio web que usa solicitudes, realmente mire el html / text porque puede encontrar los javascripts JSON en el pie de página listos para ser analizados.
PhantomJS
navegador sin cabeza con selenio. Gracias. (no olvide aceptar la respuesta si fue útil)UserAgent
. ¿Alguien sabe por qué? ¿Alguien podría proporcionar una lista de mensajes aceptablesUserAgent
?si esta pregunta sigue siendo válida
He usado el agente de usuario falso
Cómo utilizar:
salida:
fuente
Intente hacer esto, usando Firefox como agente de usuario falso (además, es un buen script de inicio para raspado web con el uso de cookies):
USO:
fuente
La raíz de la respuesta es que la persona que hace la pregunta necesita tener un intérprete de JavaScript para obtener lo que busca. Lo que encontré es que puedo obtener toda la información que quería en un sitio web en json antes de que fuera interpretada por JavaScript. Esto me ha ahorrado un montón de tiempo en lo que sería analizar html con la esperanza de que cada página web tenga el mismo formato.
Entonces, cuando obtenga una respuesta de un sitio web que usa solicitudes, realmente mire el html / text porque puede encontrar los javascripts JSON en el pie de página listos para ser analizados.
fuente