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.
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.
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 )
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} )
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} )
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!