Dalam beberapa tahun kebelakangan ini, penggunaan Python untuk perlombongan dan analisis data telah menjadi semakin biasa. Scrapy ialah alat yang popular dalam hal mengikis data tapak web. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Scrapy untuk merangkak data daripada forum permainan untuk analisis data seterusnya.
1 Pilih sasaran
Pertama, kita perlu memilih tapak web sasaran. Di sini, kami memilih forum permainan.
Seperti yang ditunjukkan dalam gambar di bawah, forum ini mengandungi pelbagai sumber, seperti panduan permainan, muat turun permainan, komunikasi pemain, dsb.
Matlamat kami adalah untuk mendapatkan tajuk siaran, pengarang, masa penerbitan, bilangan balasan dan maklumat lain untuk analisis data seterusnya.
2. Buat projek Scrapy
Sebelum mula merangkak data, kita perlu mencipta projek Scrapy. Pada baris arahan, masukkan arahan berikut:
scrapy startproject forum_spider
Ini akan mencipta projek baharu yang dipanggil "forum_spider".
3. Konfigurasikan tetapan Scrapy
Dalam fail settings.py, kami perlu mengkonfigurasi beberapa tetapan untuk memastikan Scrapy berjaya merangkak data yang diperlukan daripada tapak web forum. Berikut ialah beberapa tetapan yang biasa digunakan:
BOT_NAME = 'forum_spider' SPIDER_MODULES = ['forum_spider.spiders'] NEWSPIDER_MODULE = 'forum_spider.spiders' ROBOTSTXT_OBEY = False # 忽略robots.txt文件 DOWNLOAD_DELAY = 1 # 下载延迟 COOKIES_ENABLED = False # 关闭cookies
4. Menulis Spider
Dalam Scrapy, Spider ialah kelas yang digunakan untuk melaksanakan kerja sebenar (iaitu merangkak tapak web). Kita perlu menentukan labah-labah untuk mendapatkan data yang diperlukan daripada forum.
Kami boleh menggunakan Scrapy’s Shell untuk menguji dan nyahpepijat Labah-labah kami. Pada baris arahan, masukkan arahan berikut:
scrapy shell "https://forum.example.com"
Ini akan membuka shell Python interaktif dengan forum sasaran.
Dalam shell, kita boleh menggunakan arahan berikut untuk menguji Pemilih yang diperlukan:
response.xpath("xpath_expression").extract()
Di sini, "xpath_expression" sepatutnya merupakan ungkapan XPath yang digunakan untuk memilih data yang diperlukan.
Sebagai contoh, kod berikut digunakan untuk mendapatkan semua urutan dalam forum:
response.xpath("//td[contains(@id, 'td_threadtitle_')]").extract()
Selepas kami menentukan ungkapan XPath, kami boleh mencipta Spider.
Dalam folder labah-labah, kami mencipta fail baharu yang dipanggil "forum_spider.py". Berikut ialah kod untuk Spider:
import scrapy class ForumSpider(scrapy.Spider): name = "forum" start_urls = [ "https://forum.example.com" ] def parse(self, response): for thread in response.xpath("//td[contains(@id, 'td_threadtitle_')]"): yield { 'title': thread.xpath("a[@class='s xst']/text()").extract_first(), 'author': thread.xpath("a[@class='xw1']/text()").extract_first(), 'date': thread.xpath("em/span/@title").extract_first(), 'replies': thread.xpath("a[@class='xi2']/text()").extract_first() }
Dalam kod di atas, kami mula-mula mentakrifkan nama Spider sebagai "forum" dan menetapkan URL permulaan. Kemudian, kami menentukan kaedah parse() untuk mengendalikan respons halaman forum.
Dalam kaedah parse(), kami menggunakan ungkapan XPath untuk memilih data yang kami perlukan. Seterusnya, kami menggunakan pernyataan hasil untuk menjana data ke dalam kamus Python dan mengembalikannya. Ini bermakna Spider kami akan merangkak semua benang dalam halaman utama forum satu demi satu dan mengekstrak data yang diperlukan.
5. Run Spider
Sebelum melaksanakan Spider, kita perlu memastikan bahawa Scrapy telah dikonfigurasikan dengan betul. Kami boleh menguji sama ada labah-labah berfungsi dengan betul menggunakan arahan berikut:
scrapy crawl forum
Ini akan memulakan labah-labah kami dan mengeluarkan data yang ditangkap dalam konsol.
6. Analisis Data
Selepas kami berjaya merangkak data, kami boleh menggunakan beberapa perpustakaan Python (seperti Pandas dan Matplotlib) untuk menganalisis dan menggambarkan data.
Kami boleh menyimpan data yang dirangkak dahulu sebagai fail CSV untuk analisis dan pemprosesan data yang lebih mudah.
import pandas as pd df = pd.read_csv("forum_data.csv") print(df.head())
Ini akan memaparkan lima baris pertama data dalam fail CSV.
Kami boleh menggunakan perpustakaan seperti Pandas dan Matplotlib untuk melaksanakan analisis statistik dan visualisasi data.
Berikut ialah contoh mudah di mana kami mengisih data dengan masa menyiarkan dan memplot jumlah bilangan siaran.
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("forum_data.csv") df['date'] = pd.to_datetime(df['date']) #将时间字符串转化为时间对象 df['month'] = df['date'].dt.month grouped = df.groupby('month') counts = grouped.size() counts.plot(kind='bar') plt.title('Number of Threads by Month') plt.xlabel('Month') plt.ylabel('Count') plt.show()
Dalam kod di atas, kami menukar masa keluaran menjadi objek Python Datetime dan mengumpulkan data mengikut bulan. Kami kemudian menggunakan Matplotlib untuk mencipta histogram untuk menunjukkan bilangan siaran setiap bulan.
7. Ringkasan
Artikel ini memperkenalkan cara menggunakan Scrapy untuk merangkak data daripada forum permainan dan menunjukkan cara menggunakan pustaka Pandas dan Matplotlib Python untuk analisis dan visualisasi data. Alat ini adalah perpustakaan Python yang sangat popular dalam bidang analisis data dan boleh digunakan untuk meneroka dan menggambarkan data tapak web.
Atas ialah kandungan terperinci Amalan scrapy: merangkak dan menganalisis data daripada forum permainan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!