Scrapy は WeChat パブリック アカウント記事のクロールと分析を実装します

WBOY
リリース: 2023-06-22 09:41:24
オリジナル
1852 人が閲覧しました

Scrapy は WeChat パブリックアカウント記事のクロールと分析を実装します

WeChat は近年非常に人気のあるソーシャル メディア アプリケーションであり、そこで運用されるパブリック アカウントも非常に重要な役割を果たしています。誰もが知っているように、WeChat の公開アカウントは記事、グラフィック メッセージ、その他の情報を公開できるため、情報と知識の海です。この情報は、メディア報道、学術研究など、さまざまな分野で広く使用できます。

そこで、この記事では、Scrapy フレームワークを使用して WeChat パブリック アカウントの記事をクロールおよび分析する方法を紹介します。 Scrapy は、主な機能がデータ マイニングと情報検索である Python Web クローラー フレームワークです。したがって、Scrapy は非常にカスタマイズ可能で効率的です。

  1. Scrapy をインストールしてプロジェクトを作成する

Scrapy フレームワークをクロールに使用するには、まず Scrapy とその他の依存関係をインストールする必要があります。 pip コマンドを使用してインストールできます。インストール プロセスは次のとおりです:

pip install scrapy
pip install pymongo
pip install mysql-connector-python
ログイン後にコピー

Scrapy をインストールした後、Scrapy コマンド ライン ツールを使用してプロジェクトを作成する必要があります。コマンドは次のとおりです:

scrapy startproject wechat
ログイン後にコピー

このコマンドを実行すると、Scrapy は「wechat」という名前のプロジェクトを作成し、プロジェクト ディレクトリ内に多くのファイルとディレクトリを作成します。

  1. WeChat パブリック アカウントの記事のクロールを実装する

クロールを開始する前に、まず WeChat パブリック アカウントの記事ページの URL 形式を理解する必要があります。一般的な WeChat パブリック アカウントの記事ページの URL は次のようになります。

https://mp.weixin.qq.com/s?__biz=XXX&mid=XXX&idx=1&sn=XXX&chksm=XXX#wechat_redirect
ログイン後にコピー

このうち、__biz は WeChat パブリック アカウントの ID、mid は記事の ID、idx は記事のシリアル番号を表します。 、sn は記事の署名を表し、chksm はコンテンツ検証を表します。したがって、特定の公式アカウントのすべての記事をクロールしたい場合は、公式アカウントの ID を見つけて、それを使用して URL を構築する必要があります。このうち、biz_idは公式アカウントの一意の識別子です。

まず、公式アカウントの記事をクロールしたいので、多数の公式アカウントIDを含むリストを用意する必要があります。 ID の収集はさまざまな手段で行うことができます。ここでは、例として複数のテスト ID を含むリストを使用します。

biz_ids = ['MzU5MjcwMzA4MA==', 'MzI4MzMwNDgwMQ==', 'MzAxMTcyMzg2MA==']
ログイン後にコピー

次に、特定の公開アカウントのすべての記事をクロールするスパイダーを作成する必要があります。ここでは、公式アカウントの名前とIDをSpiderに渡し、異なる公式アカウントIDを扱えるようにします。

import scrapy
import re

class WeChatSpider(scrapy.Spider):
    name = "wechat"
    allowed_domains = ["mp.weixin.qq.com"]
    
    def __init__(self, name=None, biz_id=None):
        super().__init__(name=name)
        self.start_urls = ['https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={}==#wechat_redirect'.format(biz_id)]

    def parse(self, response):
        article_urls = response.xpath('//h4[1]/a/@href')
        for url in article_urls.extract():
            yield scrapy.Request(url, callback=self.parse_article)
        
        next_page = response.xpath('//a[@id="js_next"]/@href')
        if next_page:
            yield scrapy.Request(response.urljoin(next_page[0].extract()), callback=self.parse)
    
    def parse_article(self, response):
        url = response.url
        title = response.xpath('//h2[@class="rich_media_title"]/text()')
        yield {'url': url, 'title': title.extract_first().strip()}
ログイン後にコピー

Spider の主な機能は、指定された公式アカウント ID を使用して公式アカウントのホームページにアクセスし、各ページを再帰的に走査してすべての記事の URL を抽出することです。さらに、parse_article メソッドを使用して、後続の処理のために記事の URL とタイトルを抽出します。全体として、このスパイダーはそれほど複雑ではありませんが、抽出速度は遅いです。

最後に、ターミナルで次のコマンドを入力して Spider を起動する必要があります:

scrapy crawl wechat -a biz_id=XXXXXXXX
ログイン後にコピー

同様に、複数の公式アカウントをクロールすることもできます。すべての公式アカウントの名前を指定するだけです。コマンド ID のみ:

scrapy crawl wechat -a biz_id=ID1,ID2,ID3
ログイン後にコピー
  1. 記事データの保存

記事をクロールした後、記事のタイトルと URL をデータベース (例: MongoDB、MySQL など)。ここでは、pymongo ライブラリを使用してクロールされたデータを保存します。

import pymongo

class MongoPipeline(object):
    collection_name = 'wechat'

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item
ログイン後にコピー

このパイプラインでは、データを保存するバックエンドとして MongoDB を使用します。このクラスは、他のデータベース システムを使用するために必要に応じて変更できます。

次に、settings.py ファイルでデータベース関連のパラメーターを構成する必要があります:

MONGO_URI = 'mongodb://localhost:27017/'
MONGO_DATABASE = 'wechat'
ITEM_PIPELINES = {'myproject.pipelines.MongoPipeline': 300}
ログイン後にコピー

最後に、Spider で Pipeline を呼び出して、データを MongoDB に保存します:

class WeChatSpider(scrapy.Spider):
    name = "wechat"
    allowed_domains = ["mp.weixin.qq.com"]
    
    def __init__(self, name=None, biz_id=None):
        super().__init__(name=name)
        self.start_urls = ['https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={}==#wechat_redirect'.format(biz_id)]

    def parse(self, response):
        article_urls = response.xpath('//h4[1]/a/@href')
        for url in article_urls.extract():
            yield scrapy.Request(url, callback=self.parse_article)
        
        next_page = response.xpath('//a[@id="js_next"]/@href')
        if next_page:
            yield scrapy.Request(response.urljoin(next_page[0].extract()), callback=self.parse)
            
    def parse_article(self, response):
        url = response.url
        title = response.xpath('//h2[@class="rich_media_title"]/text()')
        yield {'url': url, 'title': title.extract_first().strip()}

        pipeline = response.meta.get('pipeline')
        if pipeline:
            item = dict()
            item['url'] = url
            item['title'] = title.extract_first().strip()
            yield item
ログイン後にコピー

上記のコードでは、Response.meta.get('pipeline') を使用して Spider に設定した Pipeline オブジェクトを取得します。したがって、パイプラインをサポートするには、次のコードを Spider コードに追加するだけです:

yield scrapy.Request(url, callback=self.parse_article, meta={'pipeline': 1})
ログイン後にコピー
  1. データ分析

最後に、Scrapy や pandas などのライブラリを使用してデータを実装します。分析と可視化。

ここでは、MongoDB からクロールしたデータを抽出し、CSV ファイルに保存します。その後、パンダを使用して CSV ファイルを処理し、視覚化できます。

以下は実装プロセスです:

import pandas as pd
from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['wechat']
articles = db['wechat']

cursor = articles.find()
doc = list(cursor)

df = pd.DataFrame(doc)
df.to_csv('wechat.csv', encoding='utf-8')

df.groupby('biz_id')['title'].count().plot(kind='bar')
ログイン後にコピー

上記のコードでは、MongoDB ライブラリと Pandas ライブラリを使用して、クロールされたデータを CSV ファイルのデータ フォルダーに保存します。次に、Pandas の強力なデータ分析機能を使用して、各公開アカウントの記事数を視覚的に表示しました。

以上がScrapy は WeChat パブリック アカウント記事のクロールと分析を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート