Saltar al contenido
Underc0de /foro

como puedo hacer scraping cambiando la vpn, proxy o con tor?

Iniciado por lemos.ema, Abril 26, 2019, 10:35:03 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Avatar de lemos.ema
Abril 26, 2019, 10:35:03 AM Ultima modificación: Abril 26, 2019, 11:48:02 AM por Gabriela

Hola que tal? como están? mi idea es poder realizar un scraping a skycanner. Tengo los siguientes problemas: cuando intento hacerles muchas peticiones este me bloquea. Nose muy bien como poder hacer para cambiar la vpn cada vez que haga una petición (otra de las cosas que se me había ocurrido es hacerlo mediante TOR browser, pero nose si es que hice el código mal o que pero tampoco me deja) les envió el codigo para que vean y me digan que piensan, estoy utilizando python3 con un sistema operativo linux ubuntu y lo corro en VS (es bueno aclarar todo los detalles):

Código: python
lugarDeseado="Israel"
paises=['al',
'de',
'ad',
'at',
'be',
'by',
'ba',
'bg',
'hr',
'dk',
'sk',
'si',
'es',
'ee',
'ru',
'fi',
'fr',
'gi',
'gr',
'gg',
'hu',
'ie',
'im',
'is',
'ax',
'fo',
'it',
'je',
'lv',
'li',
'lt',
'lu',
'mk',
'mt',
'md',
'mc',
'me',
'no',
'nl',
'pl',
'pt',
'uk',
'cz',
'ro',
'sm',
'va',
'rs',
'se',
'ch',
'sj',
'tr',
'ua']
import random
from lxml.html import fromstring
import requests
from itertools import cycle
import traceback


desktop_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
                 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
                 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
                 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
                 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
                 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
                 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
                 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
                 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
                 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0']



try:
    for i in range(len(paises)):
        ## json url ##
        url="https://www.espanol.skyscanner.com/g/browseservice/dataservices/browse/v3/bvweb/AR/ARS/es-MX/destinations/"+paises[i]+"/anywhere/anytime/?profile=minimalcityrollupwithnamesv2&include=image;holiday&apikey=8aa374f4e28e4664bf268f850f767535"
        print(url)
        headers = {
            "referer": "https://www.espanol.skyscanner.com/transporte/vuelos-desde/buea/?adults=1&children=0&adultsv2=1&childrenv2=&infants=0&cabinclass=economy&rtn=0&preferdirects=false&outboundaltsenabled=false&inboundaltsenabled=false&ref=home",
            "user-agent" :random.choice(desktop_agents),
            "x-requested-with": "XMLHttpRequest"}

        response = requests.get(url,headers=headers)
        if response.status_code == 200:
            print ("ok")
        else:
            print ("error 400")
        data = response.json()
        try:
            for pais in data["PlacePrices"]:
                if pais.get('Name')== lugarDeseado:
                    dprice = pais.get("DirectPrice")
                    iprice = pais.get('IndirectPrice')

                    if dprice != None and iprice != None:
                        print(f"{pais['Id']}  {dprice} {iprice}  {pais['Name']} ")
                    # solo existe DirectPrice
                    elif dprice == None:
                        print(f"{pais['Id']}  {iprice:<10}  {pais['Name']} ")
                    # solo existe IndirectPrice
                    else:
                        print(f"{pais['Id']}  {dprice:<10}  {pais['Name']} ")
                else:
                    pass
        except:
            print("no")


    else:
        i=i+1
except:
    pass

perdon si es algo facil para ustedes, yo me estoy introduciendo y le estoy metiendo toda la voluntad del mundo. Si me pueden explicar como funciona el cambio de proxy o un browser con Tor tambien se los agradeceria . Obvio que si tienen alguna mejor sugerencia porfa expliquenla. Gracias
WhatsApp Telegram

1 respuesta

Avatar de HATI
Puedes utilizar proxies para cambiar la ip, existen APIs que te proveen proxies gratuitos, o utilizar la libreria de Stem para hacerlo desde Tor.


Jugar o perder

¿Te quedó una duda sobre Dudas y pedidos generales?

Preguntala y te responde la comunidad (y el asistente Underc0de IA si nadie llega antes). Es gratis y tarda un minuto.

Ya tengo cuenta
Guardamos tu pregunta en este navegador: después de entrar la publicás con un clic.
Grupo de WhatsApp