Amalan scrapy: merangkak dan menganalisis data daripada forum permainan

WBOY
Lepaskan: 2023-06-22 09:04:39
asal
938 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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"
Salin selepas log masuk

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()
Salin selepas log masuk

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()
Salin selepas log masuk

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()
            }
Salin selepas log masuk

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
Salin selepas log masuk

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())
Salin selepas log masuk

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()
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan