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.

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

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