Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana cara menggunakan Scrapy untuk merangkak data Zhihu?
Scrapy ialah alat perangkak web Python yang boleh membantu kami mendapatkan pelbagai data dengan mudah di Internet. Zhihu ialah platform Soal Jawab sosial yang popular Gunakan Scrapy untuk menangkap soalan, jawapan, maklumat pengguna dan data lain dengan cepat di Zhihu. Artikel ini akan memperkenalkan cara menggunakan Scrapy untuk merangkak data Zhihu.
Mula-mula anda perlu memasang Scrapy. Anda boleh menggunakan arahan pip untuk memasang terus:
pip install scrapy
Masukkan direktori tempat anda ingin mencipta projek Scrapy dalam terminal dan gunakan yang berikut arahan untuk mencipta projek:
scrapy startproject zhihu
Arahan ini akan mencipta projek Scrapy bernama "zhihu" dalam direktori semasa.
Gunakan arahan berikut untuk mencipta fail Spider bernama "zhihu_spider.py" dalam direktori projek:
scrapy genspider zhihu_spider zhihu.com
Arahan ini akan Cipta fail "zhihu_spider.py" dalam subdirektori "spiders" di bawah direktori projek Fail ini mengandungi Spider dengan zhihu.com sebagai URL permulaan.
Buka fail "zhihu_spider.py" dan tambah kod berikut:
import scrapy class ZhihuSpider(scrapy.Spider): name = 'zhihu' allowed_domains = ['zhihu.com'] start_urls = ['https://www.zhihu.com/'] def parse(self, response): pass
Kod mentakrifkan fail bernama "ZhihuSpider "Kelas labah-labah. Kelas Spider perlu mentakrifkan atribut berikut:
Dalam contoh ini, URL permulaan Spider ditetapkan kepada zhihu.com. Spider juga mesti mengandungi kaedah yang dipanggil "parse" untuk memproses data yang dikembalikan oleh respons. Dalam contoh ini, kaedah "parse" belum dilaksanakan, jadi pernyataan "lulus" kosong ditambahkan dahulu.
Selepas mencipta Spider, anda perlu menambah kod untuk menghuraikan data halaman. Dalam kaedah "parse", gunakan kod berikut:
def parse(self, response): questions = response.css('div[data-type="question"]') for question in questions: yield { 'question': question.css('h2 a::text').get(), 'link': question.css('h2 a::attr(href)').get(), 'answers': question.css('div.zm-item-answer::text').getall(), }
Kod ini mendapat elemen div dalam halaman yang mengandungi atribut "jenis data" tanpa "soalan". Kemudian, gelung melalui setiap elemen div untuk mengekstrak tajuk soalan, pautan dan senarai jawapan.
Dalam kod di atas, "hasil" ialah kata kunci dalam bahasa Python yang digunakan untuk menjana penjana. Penjana ialah lelaran yang mengandungi elemen Selepas setiap elemen dikembalikan, pelaksanaan dijeda pada kedudukan elemen tersebut. Dalam Scrapy, kata kunci "hasil" digunakan untuk mengembalikan data yang dihuraikan daripada halaman ke dalam Scrapy.
Selepas anda selesai menulis kod, gunakan arahan berikut untuk menjalankan perangkak dalam terminal:
scrapy crawl zhihu
Arahan ini akan lancarkan rangka kerja Scrapy dan mulakan data Crawling Zhihu. Scrapy secara automatik akan mengakses URL permulaan yang dinyatakan dalam Spider dan menghuraikan data halaman yang dikembalikan melalui kaedah "parse". Data yang dihuraikan akan dikeluarkan ke terminal. Jika anda perlu menyimpan data, anda boleh menyimpan data dalam fail CSV, JSON, dsb.
Kod di atas hanya boleh merangkak soalan, jawapan dan data lain, tetapi tidak boleh mendapatkan maklumat pengguna. Jika anda perlu merangkak data pengguna, anda perlu menggunakan antara muka API Zhihu. Dalam Spider, anda boleh menggunakan kod berikut untuk mendapatkan data format JSON yang dikembalikan oleh antara muka API:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'} url = f'https://www.zhihu.com/api/v4/members/{user}?include=following_count,follower_count,badge[?(type=best_answerer)].topics&limit=20' yield scrapy.Request(url, headers=headers, callback=self.parse_user)
Kod ini memperoleh maklumat pengguna yang ditentukan daripada antara muka API. Di sini, rentetan berformat f-string digunakan untuk memasukkan nama pengguna pengguna yang akan diperolehi ke dalam URL.
Dalam fungsi panggil balik, gunakan kod berikut untuk mengekstrak data yang diperlukan daripada data format JSON:
def parse_user(self, response): data = json.loads(response.body)['data'] following_count = data['following_count'] follower_count = data['follower_count'] best_answerer = data['badge'][0]['topics'] yield { 'user_id': data['id'], 'name': data['name'], 'headline': data['headline'], 'following_count': following_count, 'follower_count': follower_count, 'best_answerer': best_answerer, }
Kod ini mengekstrak ID pengguna, nama panggilan pengguna, avatar dan ikut daripada JSON data Nombor, bilangan peminat, soalan jawapan terbaik dan data lain.
Artikel ini memperkenalkan cara menggunakan Scrapy untuk merangkak data Zhihu. Pertama, anda perlu membuat projek Scrapy dan mencipta Spider. Kemudian, gunakan pemilih CSS untuk menghuraikan data dalam halaman dan menyimpan data yang dirangkak dalam penjana. Akhir sekali, simpannya dalam fail CSV, JSON, dsb., atau keluarkan terus ke terminal. Jika anda perlu mendapatkan data pengguna, anda boleh menggunakan antara muka API Zhihu untuk mengekstrak data yang berkaitan daripada data JSON.
Atas ialah kandungan terperinci Bagaimana cara menggunakan Scrapy untuk merangkak data Zhihu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!