Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Scrapy log masuk secara automatik semasa proses merangkak?

Bagaimanakah Scrapy log masuk secara automatik semasa proses merangkak?

王林
王林asal
2023-06-23 09:20:451164semak imbas

Bagaimanakah Scrapy log masuk secara automatik semasa proses merangkak?

Apabila merangkak data tapak web, sesetengah tapak web memerlukan pengesahan log masuk pengguna untuk menyemak imbas halaman tertentu atau mendapatkan lebih banyak data. Pada masa yang sama, bagi sesetengah data yang hanya boleh diperolehi selepas log masuk, jurutera perangkak sering menggunakan beberapa operasi automatik untuk mensimulasikan log masuk ke tapak web untuk mengumpul data perangkak. Dalam artikel ini, kami akan memperincikan cara melaksanakan fungsi log masuk automatik dalam Scrapy.

  1. Buat labah-labah log masuk

Buat labah-labah baharu dan namakannya "login_spider". Tujuan labah-labah ini adalah untuk menyelesaikan kerja log masuk simulasi, iaitu, untuk menyelesaikan kerja log masuk pengguna sebelum perangkak bermula.

  1. Buat borang log masuk

Cari borang pada halaman log masuk dan lihat kod html borang tersebut.
Cari medan yang perlu diisi (atribut nama), seperti "nama pengguna", "kata laluan", dll., dan salinnya.
Gunakan kaedah Pemilih untuk mencari teg input yang sepadan dengan medan ini, gunakan kaedah ekstrak() untuk mendapatkan nilainya dan berikannya kepada nilai kunci yang sepadan.

    def parse(self,response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={'username': 'your_username', 'password': 'your_password'},
            callback=self.start_scraping
        )
  1. Tulis fungsi panggil balik apabila labah-labah log masuk mula berjalan

Apa yang dilakukan oleh fungsi panggil balik log masuk di sini adalah untuk mendapatkan kuki melalui respons dengan nilai Token log masuk, bina objek Permintaan baharu dan lulus nilai kuki (pengepala) untuk digunakan oleh labah-labah perniagaan seterusnya.

    def start_scraping(self, response):
        # Get CSRF token
        token = response.css('input[name="csrf_token"]::attr(value)').extract_first()
        logging.info('CSRF token obtained: ' + token)

        # Create cookie dict
        cookie = response.headers.getlist('Set-Cookie')
        cookie = [str(c, 'utf-8') for c in cookie]
        cookie_dict = {
            str(c.split('; ')[0].split('=')[0]): str(c.split('; ')[0].split('=')[1])
            for c in cookie
        }

        # Store cookie dict in spider settings
        self.settings.set('COOKIE_DICT', cookie_dict, priority='cmdline')

        # Start scraping main website
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie}
        )
  1. Gunakan kuki untuk mengeluarkan permintaan dengan maklumat pengguna

Selepas log masuk ke labah-labah, hubungi kaedah start_requests untuk menghantar Permintaan pertama. Dapatkan nilai cookie_dict yang disimpan dalam langkah sebelumnya daripada tetapan dan hantarkannya kepada perangkak menggunakan parameter pengepala.

    def start_requests(self):
        cookie = self.settings.get('COOKIE_DICT')
        yield scrapy.Request(
            url='https://www.example.com/your/start/url/',
            callback=self.parse_homepage,
            headers={'Cookie': cookie},
            meta={'login': True}
        )
  1. Buat labah-labah perniagaan

Gunakan maklumat kuki untuk mengakses halaman sasaran sebenar selepas log masuk. Dalam penyesuaian labah-labah perniagaan, semua URL yang terlibat yang perlu mendapatkan maklumat kuki diakses menggunakan maklumat kuki. Berikut ialah kod labah-labah perniagaan mudah

    class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        yield scrapy.Request('https://www.example.com/real-target-url/', callback=self.parse, headers={'Cookie': self.settings.get('COOKIE_DICT')})

    def parse(self, response):
        # Do whatever you want with the authenticated response

Melalui langkah di atas, kita boleh menggunakan rangka kerja Scrapy untuk melaksanakan fungsi log masuk simulasi. Dengan membawa nilai kuki, Scrapy boleh terus menangkap data yang memerlukan pengesahan log masuk tanpa log keluar. Walaupun mungkin terdapat isu keselamatan dalam berbuat demikian, penyelesaian ini boleh dilaksanakan apabila mempelajari crawler dan menjalankan penyelidikan untuk tujuan akademik.

Atas ialah kandungan terperinci Bagaimanakah Scrapy log masuk secara automatik semasa proses merangkak?. 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