Scrapy یک فریمورک فوق العاده برای خزش اطلاعات هست اگه وقت کنم حتما بیشتر دربارش آموزش میزارم.
برای اینکه تو اسکریپی پروکسی تنظیم کنید ۲ تا راه است.
1. در درخواست پروکسی رو تنظیم کنید
1 2 3 4 5 6 7 8 9 10 |
import scrapy, base64 class TestIP(scrapy.Spider) name = 'test_ip' def start_requests(self): proxy_uri = 'http://localhost:8118' auth='username:password'.encode('utf-8') yield scrapy.Rquest('http://icanhazip.com',meta={'proxy':proxy_uri}, headers={'Proxy-Authorization': b'Basic '+base64.urlsafe_b64encode(auth)} ) |
یا
1 2 3 4 5 6 7 8 9 10 |
import scrapy from w3lib.http import basic_auth_header class TestIP(scrapy.Spider) name = 'test_ip' def start_requests(self): proxy_uri = 'http://localhost:8118' yield scrapy.Rquest('http://icanhazip.com',meta={'proxy':proxy_uri}, headers={'Proxy-Authorization': basic_auth_header('username', 'password')} ) |
2. یک middleware تعریف کنید
1 2 3 4 5 6 7 |
class TestIP(scrapy.Spider): name = 'test_ip' custom_settings = { 'DOWNLOADER_MIDDLEWARES': { 'PROJECT.middlewares.UserProxy.UserProxyMiddleware': 100, } } |
و در مسیر PROJECT/middlewares فایل UserProxy رو ایجاد کنید و با یکی از دو روش بالا پروکسی رو تنظیم کنید.
1 2 3 4 5 |
class UserProxymiddleware(): def process_request(self, request, spider): proxy_uri = 'http://localhost:8118' request.meta['proxy'] = proxy_uri request.headers['Proxy-Authorization'] = basic_auth_header('username', 'password') |
اگه پروکسی نیازی به احراز هویت نداره لازم نیست header رو تنظیم کنید