Rozważmy przypadek, Chcę często indeksować witryny internetowe, ale mój adres IP został zablokowany po pewnym dniu/limicie.Zmieniaj adres IP dynamicznie?
Jak zatem zmienić adres IP dynamicznie lub w inny sposób?
Rozważmy przypadek, Chcę często indeksować witryny internetowe, ale mój adres IP został zablokowany po pewnym dniu/limicie.Zmieniaj adres IP dynamicznie?
Jak zatem zmienić adres IP dynamicznie lub w inny sposób?
Podejście za pomocą Scrapy uczyni korzystanie z dwóch składników RandomProxy
i RotateUserAgentMiddleware
i modyfikacja DOWNLOADER_MIDDLEWARES
jak następuje:
DOWNLOADER_MIDDLEWARS
trzeba będzie wstawić nowe komponenty w settings.py
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 90,
'tutorial.randomproxy.RandomProxy': 100,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
'tutorial.spiders.rotate_useragent.RotateUserAgentMiddleware' :400,
}
Losowe Proxy:
Ten komponent będzie przetwarzać żądania Scrapy użyciu losowo pełnomocnika z listy, aby uniknąć zakazu IP i poprawić szybkość indeksowania.
Więcej szczegółów tutaj: (https://github.com/aivarsk/scrapy-proxies) Możesz zbudować swoją listę proxy z szybkiego wyszukiwania w Internecie. Skopiuj linki w pliku list.txt zgodnie z żądanym formatem adresu URL.
Obrót agenta użytkownika
dla każdego żądania scrapy losowy kliencka będzie używany z listy można zdefiniować z góry
class RotateUserAgentMiddleware(UserAgentMiddleware):
def __init__(self, user_agent=''):
self.user_agent = user_agent
def process_request(self, request, spider):
ua = random.choice(self.user_agent_list)
if ua:
request.headers.setdefault('User-Agent', ua)
# Add desired logging message here.
spider.log(
u'User-Agent: {} {}'.format(request.headers.get('User-Agent'), request),
level=log.DEBUG
)
#the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape
#for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
user_agent_list = [\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"\
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",\
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",\
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",\
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]
Więcej szczegółów tutaj: (https://gist.github.com/seagatesoft/e7de4e3878035726731d)
Niektóre aplikacje VPN umożliwiają automatyczną zmianę adresu IP na nowy losowy adres IP w określonych odstępach czasowych, takich jak: co 2 minuty. Zarówno oprogramowanie HMA! Pro VPN, jak i oprogramowanie VPN4ALL obsługują tę funkcję.
Dzięki za rozwiązanie, które pomaga mi dużo. Czy możesz tutaj wyjaśnić rolę DOWNLOADER_MIDDLEWARES? @aberna –
W RotateUserAgentMiddleware, tylko jeden useragent przypisuje pająk, tzn. przeszukuję rekurencyjne wywołania, ponieważ każde połączenie, które chciałem zmienić User-Agent, nie ma miejsca w powyższym kodzie. Proszę pomóż mi. –
jak zdobyć listę proxy? ktoś? help –