2009-12-19 11 views
9

Ho un web crawler python e voglio distribuire le richieste di download tra molti server proxy, probabilmente con il funzionamento di squid (anche se sono aperto alle alternative). Ad esempio, potrebbe funzionare in modalità round-robin, dove request1 passa a proxy1, request2 a proxy2 e alla fine torna indietro. Qualche idea su come impostare questo?Proxy rotanti per scraping web

Per rendere più difficile, mi piacerebbe anche essere in grado di modificare dinamicamente l'elenco dei proxy disponibili, ridurli e aggiungerne altri.

Se è importante, gli indirizzi IP vengono assegnati dinamicamente.

Grazie :)

risposta

6

Fai la tua crawler hanno una lista di proxy e con ogni richiesta HTTP lasciarlo usare il proxy successivo dalla lista in un round robin. Tuttavia, ciò impedirà l'utilizzo delle connessioni persistenti HTTP/1.1. La modifica dell'elenco di proxy porterà infine a utilizzare un nuovo o non utilizzare un proxy.

Oppure avere più connessioni aperte in parallelo, una per ciascun proxy e distribuire le richieste di scansione a ciascuna delle connessioni aperte. La dinamica può essere implementata avendo il connetor che si registra con il dispatcher della richiesta.

+0

Grazie, mi ha dato alcune buone idee, principalmente utilizzando un redis impostato per memorizzare l'elenco dei proxy e il comando srandmember per ottenere un proxy. – Jacob

+0

@Jacob Puoi condividere il codice di esempio o il repository Github su come hai realizzato questo? – x0v

14

Ho impostato i proxy di rotazione utilizzando HAProxy + DeleGate + Istanze multiple Tor. Con Tor non hai un buon controllo della larghezza di banda e della latenza, ma è utile per il web scraping. Ho appena pubblicato un articolo sul tema: Running Your Own Anonymous Rotating Proxies

+3

Questo è abbastanza bello. Purtroppo sempre più siti sembrano vietare gli indirizzi IP associati ai nodi di uscita di Tor. – ChrisArmstrong

+0

@ChrisArmstrong Yup. Questo è qualcosa da considerare se stai pensando di seguire questa strada. – Dodgie