У меня есть куча страниц, около 200 000. Я обычно использую прокси Tor и Polipo, чтобы скрыть поведение своих пауков, даже если они вежливы, мы никогда не узнаем.Поэтому, если я войду в систему, это бесполезно использовать одну учетную запись и изменить IP.Вот почему я могу создать несколько учетных записей на веб-сайте и установить моего паука с аргументами, подобными приведенным ниже:
class ASpider(scrapy.Spider):
name = "spider"
start_urls = ['https://www.a_website.com/compte/login']
def __init__ (self, username=None, password=None):
self.username = username
self.password = password
def parse(self, response):
token = response.css('[name="_csrf_token"]::attr(value)').get()
data_log = {
'_csrf_token': token,
'_username': self.username,
'_password': self.password
}
yield scrapy.FormRequest.from_response(response, formdata=data_log, callback=self.after_login) #No matter the rest
И запустить несколько таких же пауков, как:
scrapy crawl spider -a username=Bidule -a password=TMTC #cmd1
scrapy crawl spider -a username=Truc -a password=TMTC #cmd2
и отсканировать его по нескольким командам, так как у меня есть несколько учетных записей.
Мне удалось проверить ip с помощью кода, следующего в конце spider.py
:
yield scrapy.Request('http://checkip.dyndns.org/',meta={'item':item_cheval}, callback=self.checkip)
def checkip(self, response):
print('IP: {}'.format(response.xpath('//body/text()').re('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')[0]))
возвращает одинаковый IP-адрес в обеих запущенных командах.Так что моему прокси не удается назначить разные IP-адреса каждому пауку.
Кто-то сказал мне о bindadress
, но я понятия не имею, как он работает и действительно ли он дает то, что я ожидаю.
Примечания: я использую это в моих middlewares.py
:
class ProxyMiddleware(object):
def process_request(self, request, spider):
request.meta['proxy'] = settings.get('HTTP_PROXY')
, и это в моих settings.py
:
# proxy for polipo
HTTP_PROXY = 'http://127.0.0.1:8123'
....
DOWNLOADER_MIDDLEWARES = {
'folder.middlewares.RandomUserAgentMiddleware': 400,
'folder.middlewares.ProxyMiddleware': 410, #Here for proxy
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None}
Это скопированные шаблоны, которые я вставил в свой код, и это работает, но я не владею этим навыком.
Версия Scrapy: 1.5.0, версия Python: 2.7.9, версия Tor: 0.3.4.8, Vidalia: 0.2.21