ホームページ >バックエンド開発 >Python チュートリアル >Twitter データをクロールするための Scrapy フレームワークの実装

Twitter データをクロールするための Scrapy フレームワークの実装

WBOY
WBOYオリジナル
2023-06-23 09:33:142761ブラウズ

Twitter データをクロールするための Scrapy フレームワークの実装

インターネットの発展に伴い、ソーシャル メディアは人々に広く使用されるプラットフォームの 1 つになりました。世界最大のソーシャル ネットワークの 1 つである Twitter は、毎日大量の情報を生成します。したがって、既存の技術的手段をどのように活用してTwitter上のデータを効果的に取得・分析するかが特に重要になっています。

Scrapy は、特定の Web サイト上のデータをクロールして抽出するように設計された Python オープン ソース フレームワークです。他の同様のフレームワークと比較して、Scrapy は拡張性と適応性が高く、Twitter などの大規模なソーシャル ネットワーク プラットフォームを十分にサポートできます。この記事では、Scrapy フレームワークを使用して Twitter データをクロールする方法を紹介します。

  1. 環境をセットアップする

クローリング作業を開始する前に、Python 環境と Scrapy フレームワークを構成する必要があります。 Ubuntu システムを例に挙げると、次のコマンドを使用して必要なコンポーネントをインストールできます。

sudo apt-get update && sudo apt-get install python-pip python-dev libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
sudo pip install scrapy
  1. プロジェクトの作成

Scrapy フレームワークを使用して、 Twitter データをクロールして Scrapy プロジェクトを作成します。ターミナルに次のコマンドを入力します。

scrapy startproject twittercrawler

このコマンドは、現在のディレクトリに「twittercrawler」という名前のプロジェクト フォルダーを作成します。このフォルダーには、いくつかの自動生成されたファイルとフォルダーが含まれます。

  1. 構成プロジェクト

Scrapy プロジェクトを開くと、「settings.py」という名前のファイルが表示されます。このファイルには、クローラ遅延時間、データベース設定、リクエスト ヘッダーなど、さまざまなクローラ構成オプションが含まれています。ここで、次の構成情報を追加する必要があります:

ROBOTSTXT_OBEY = False
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
DOWNLOAD_DELAY = 5
CONCURRENT_REQUESTS = 1

これらの構成オプションの機能は次のとおりです:

  • ROBOTSTXT_OBEY: robots.txt プロトコルに従うかどうかを示します。ここでは次のように設定します。間違いです。この契約には従わないでください。
  • USER_AGENT: クローラーが使用するブラウザの種類とバージョンを示します。
  • DOWNLOAD_DELAY: 各リクエストの遅延時間を示します。ここでは 5 秒に設定されています。
  • CONCURRENT_REQUESTS: 同時に送信されるリクエストの数を示します。安定性を確保するために、ここでは 1 に設定されています。
  1. クローラーの作成

Scrapy フレームワークでは、各クローラーは「Spider」と呼ばれるクラスを通じて実装されます。このクラスでは、Web ページをクロールおよび解析し、ローカルまたはデータベースに保存する方法を定義できます。 Twitter 上のデータをクロールするには、「twitter_spider.py」というファイルを作成し、その中に TwitterSpider クラスを定義する必要があります。以下は TwitterSpider のコードです:

import scrapy
from scrapy.http import Request

class TwitterSpider(scrapy.Spider):
    name = 'twitter'
    allowed_domains = ['twitter.com']
    start_urls = ['https://twitter.com/search?q=python']

    def __init__(self):
        self.headers = {
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'en-US,en;q=0.5',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }

    def parse(self, response):
        for tweet in response.xpath('//li[@data-item-type="tweet"]'):
            item = {}
            item['id'] = tweet.xpath('.//@data-item-id').extract_first()
            item['username'] = tweet.xpath('.//@data-screen-name').extract_first()
            item['text'] = tweet.xpath('.//p[@class="TweetTextSize js-tweet-text tweet-text"]//text()').extract_first()
            item['time'] = tweet.xpath('.//span//@data-time').extract_first()
            yield item

        next_page = response.xpath('//a[@class="js-next-page"]/@href').extract_first()
        if next_page:
            url = response.urljoin(next_page)
            yield Request(url, headers=self.headers, callback=self.parse)

TwitterSpider クラスでは、クロールする Web サイトのドメイン名と開始 URL を指定します。初期化関数では、アンチクローラーによる制限を避けるためにリクエスト ヘッダーを設定します。 parse 関数では、XPath 式を使用して、取得した Web ページを 1 つずつ解析し、Python 辞書に保存します。最後に、yield ステートメントを使用して辞書を返し、Scrapy フレームワークが辞書をローカルまたはデータベースに保存できるようにします。さらに、単純な再帰関数を使用して Twitter 検索結果の「次のページ」を処理することで、より多くのデータを簡単に取得できます。

  1. クローラーの実行

TwitterSpider クラスの作成が完了したら、ターミナルに戻り、作成したばかりの「twittercrawler」フォルダーに入り、クローラーを開始するには、次のコマンドを使用します。

scrapy crawl twitter -o twitter.json

このコマンドは、「twitter」という名前のクローラーを開始し、結果を「twitter.json」という名前のファイルに保存します。

  1. 結論

これまで、Scrapy フレームワークを使用して Twitter データをクロールする方法を紹介しました。もちろん、これはほんの始まりにすぎません。TwitterSpider クラスを拡張してさらに多くの情報を取得したり、他のデータ分析ツールを使用して取得したデータを処理したりできます。 Scrapy フレームワークの使用法を学ぶことで、データをより効率的に処理し、その後のデータ分析作業をより強力にサポートできるようになります。

以上がTwitter データをクロールするための Scrapy フレームワークの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。