Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan IP proksi dan strategi anti-merangkak dalam perangkak Scrapy

Menggunakan IP proksi dan strategi anti-merangkak dalam perangkak Scrapy

PHPz
PHPzasal
2023-06-23 11:24:292040semak imbas

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.

  1. Tambah kod berikut 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,
}
  1. Tentukan kelas RandomProxyMiddleware dalam fail middlewares.py untuk melaksanakan fungsi IP proksi rawak :
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.

  1. anti perangkak Ejen-Pengguna

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']
  1. IP Anti-Crawler

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.

  1. Kuki dan Anti-Perangka Sesi

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn