Gunakan IP proksi dan strategi anti perangkak dalam perangkak Scrapy
Dalam beberapa tahun kebelakangan ini, dengan perkembangan Internet, semakin banyak data perlu diperoleh melalui perangkak dan strategi anti perangkak untuk perangkak telah menjadi lebih dan lebih penting. Dalam banyak senario, menggunakan IP proksi dan strategi anti-perangkak telah menjadi kemahiran penting untuk pembangun perangkak. Dalam artikel ini, kami akan membincangkan cara menggunakan IP proksi dan strategi anti-rangkak dalam perangkak Scrapy untuk memastikan kestabilan dan kadar kejayaan data rangkak.
1. Mengapa anda perlu menggunakan IP proksi
Apabila perangkak melawat tapak web yang sama, mereka sering dikenal pasti sebagai alamat IP yang sama, yang boleh disekat atau disekat dengan mudah. Untuk mengelakkan perkara ini daripada berlaku, IP proksi perlu digunakan untuk menyembunyikan alamat IP sebenar dan dengan itu melindungi identiti perangkak dengan lebih baik.
2. Cara menggunakan IP proksi
Menggunakan IP proksi dalam Scrapy boleh dicapai dengan menetapkan atribut DOWNLOADER_MIDDLEWARES dalam fail settings.py.
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'your_project.middlewares.RandomUserAgentMiddleware': 400, 'your_project.middlewares.RandomProxyMiddleware': 410, }
import requests import random class RandomProxyMiddleware(object): def __init__(self, proxy_list_path): with open(proxy_list_path, 'r') as f: self.proxy_list = f.readlines() @classmethod def from_crawler(cls, crawler): settings = crawler.settings return cls(settings.get('PROXY_LIST_PATH')) def process_request(self, request, spider): proxy = random.choice(self.proxy_list).strip() request.meta['proxy'] = "http://" + proxy
Antaranya, laluan ke senarai IP proksi perlu ditetapkan dalam fail settings.py:
PROXY_LIST_PATH = 'path/to/your/proxy/list'
Apabila merangkak, Scrapy akan memilih IP proksi secara rawak untuk akses, oleh itu Ini memastikan penyembunyian identiti dan kadar kejayaan merangkak.
3. Perihal strategi anti perangkak
Pada masa ini, strategi anti perangkak untuk tapak web adalah sangat biasa, bermula daripada pertimbangan Agen Pengguna yang mudah kepada kod pengesahan yang lebih kompleks dan pengesahan peluncur. Di bawah, kami akan membincangkan cara menangani beberapa strategi anti-rangkak biasa dalam perangkak Scrapy.
Untuk menghalang capaian perangkak, tapak web sering menentukan medan Ejen Pengguna Jika Ejen Pengguna bukan kaedah penyemak imbas , ia akan memintasnya. Oleh itu, kita perlu menetapkan Agen Pengguna rawak dalam perangkak Scrapy untuk mengelakkan Agen Pengguna dikenali sebagai perangkak.
Di bawah middlewares.py, kami mentakrifkan kelas RandomUserAgentMiddleware untuk melaksanakan fungsi User-Agent rawak:
import random from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware class RandomUserAgentMiddleware(UserAgentMiddleware): def __init__(self, user_agent): self.user_agent = user_agent @classmethod def from_crawler(cls, crawler): s = cls(crawler.settings.get('user_agent', 'Scrapy')) crawler.signals.connect(s.spider_closed, signal=signals.spider_closed) return s def process_request(self, request, spider): ua = random.choice(self.user_agent_list) if ua: request.headers.setdefault('User-Agent', ua)
Pada masa yang sama, tetapkan senarai User-Agent dalam fail settings.py:
USER_AGENT_LIST = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36']
Untuk menghalang sejumlah besar permintaan daripada alamat IP yang sama, tapak web mungkin mengehadkan permintaan daripada alamat IP yang sama atau melarang akses. Untuk situasi ini, kami boleh menggunakan IP proksi untuk mengelakkan anti-perakak IP dengan menukar alamat IP secara rawak.
Tapak web boleh menyediakan Kuki dan Sesi untuk mengenal pasti permintaan Kaedah ini selalunya terikat pada akaun dan juga Kekerapan permintaan setiap akaun akan terhad. Oleh itu, kami perlu mensimulasikan Kuki dan Sesi dalam perangkak Scrapy untuk mengelak daripada dikenal pasti sebagai permintaan yang menyalahi undang-undang.
Dalam fail settings.py Scrapy, kami boleh mengkonfigurasi yang berikut:
COOKIES_ENABLED = True COOKIES_DEBUG = True
Pada masa yang sama, tentukan kelas CookieMiddleware dalam fail middlewares.py untuk mensimulasikan fungsi Cookies:
from scrapy.exceptions import IgnoreRequest class CookieMiddleware(object): def __init__(self, cookies): self.cookies = cookies @classmethod def from_crawler(cls, crawler): return cls( cookies=crawler.settings.getdict('COOKIES') ) def process_request(self, request, spider): request.cookies.update(self.cookies)
Antaranya, tetapan COOKIES adalah seperti berikut:
COOKIES = { 'cookie1': 'value1', 'cookie2': 'value2', ... }
Kuki hendaklah ditambahkan pada medan kuki permintaan sebelum permintaan dihantar. Jika permintaan itu tidak membawa kuki, ia mungkin dikenal pasti sebagai permintaan yang tidak sah oleh tapak web.
4. Ringkasan
Di atas ialah pengenalan kepada penggunaan IP proksi dan strategi anti perangkak dalam perangkak Scrapy Menggunakan IP proksi dan strategi anti perangkak adalah cara penting untuk menghalang perangkak daripada disekat dan diharamkan. Sudah tentu, strategi anti-crawler muncul tanpa henti, dan kami perlu menangani strategi anti-crawler yang berbeza dengan sewajarnya.
Atas ialah kandungan terperinci Menggunakan IP proksi dan strategi anti-merangkak dalam perangkak Scrapy. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!