Здесь небольшой фрагмент кода для смены IP на основании данных ответа в Telnet. Автор вопроса использовал платный Proxy Mesh. Ему подали идею создавать новые запросы через Tor с помощью "переговоров" с Telnet... Идея понравилась, надо пробовать...
Идея о таком переключении "instance" в Tor понравилась, но была не очень понятна. Некоторое прояснение наступило после того, как прочитал в документации Scrapy о telnet console...
Очевидно, что в ближайшее время следует обязательно написать свой вариант переключателя.
Очевидно, что в ближайшее время следует обязательно написать свой вариант переключателя.
Первоисточники и ссылки¶
Setting Scrapy proxy middleware to rotate on each request
Using Tor proxy with scrapy
Use a random user agent for each request
Scrapy comes with a built-in telnet console for inspecting and controlling a Scrapy running process. The telnet console is just a regular python shell running inside the Scrapy process, so you can do literally anything from it.
Telnet Console
Using Tor proxy with scrapy
Use a random user agent for each request
Scrapy comes with a built-in telnet console for inspecting and controlling a Scrapy running process. The telnet console is just a regular python shell running inside the Scrapy process, so you can do literally anything from it.
Telnet Console
Вот пример кода, меняем IP и user-agent¶
In []:
from scrapy import log
from settings import USER_AGENT_LIST
import random
import telnetlib
import time
# 15% ip change
class RetryChangeProxyMiddleware(object):
def process_request(self, request, spider):
if random.choice(xrange(1,100)) <= 15:
log.msg('Changing proxy')
tn = telnetlib.Telnet('127.0.0.1', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE "<PASSWORD HERE>"\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
log.msg('>>>> Proxy changed. Sleep Time')
time.sleep(10)
# 30% useragent change
class RandomUserAgentMiddleware(object):
def process_request(self, request, spider):
if random.choice(xrange(1,100)) <= 30:
log.msg('Changing UserAgent')
ua = random.choice(USER_AGENT_LIST)
if ua:
request.headers.setdefault('User-Agent', ua)
log.msg('>>>> UserAgent changed')
А этот код был в вопросе (для работы с mesh)¶
In []:
class ProxyMiddleware(object):
def process_request(self, request, spider):
request.meta['proxy'] = "http://open.proxymesh.com:[port number]"
proxy_user_pass = "username:password"
encoded_user_pass = base64.encodestring(proxy_user_pass)
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
Using Tor proxy with scrapy¶
I need help setting up Tor in Ubuntu and to use it within scrapy framework.
I did some research and found out this guide:
I did some research and found out this guide:
In []:
class RetryChangeProxyMiddleware(RetryMiddleware):
def _retry(self, request, reason, spider):
log.msg('Changing proxy')
tn = telnetlib.Telnet('127.0.0.1', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE "267765"\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
time.sleep(3)
log.msg('Proxy changed')
return RetryMiddleware._retry(self, request, reason, spider)
In []:
#then use it in settings.py:
DOWNLOADER_MIDDLEWARE = {
'spider.middlewares.RetryChangeProxyMiddleware': 600,
}
In []:
#and then you just want to send requests through local tor proxy (polipo) which could be done with:
tsocks scrapy crawl spirder
#does anyone can confirm, that this method works and you get different IPs?
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий