ホームページ >バックエンド開発 >Python チュートリアル >Twitter データをクロールするための Scrapy フレームワークの実装
Twitter データをクロールするための Scrapy フレームワークの実装
インターネットの発展に伴い、ソーシャル メディアは人々に広く使用されるプラットフォームの 1 つになりました。世界最大のソーシャル ネットワークの 1 つである Twitter は、毎日大量の情報を生成します。したがって、既存の技術的手段をどのように活用してTwitter上のデータを効果的に取得・分析するかが特に重要になっています。
Scrapy は、特定の Web サイト上のデータをクロールして抽出するように設計された Python オープン ソース フレームワークです。他の同様のフレームワークと比較して、Scrapy は拡張性と適応性が高く、Twitter などの大規模なソーシャル ネットワーク プラットフォームを十分にサポートできます。この記事では、Scrapy フレームワークを使用して Twitter データをクロールする方法を紹介します。
クローリング作業を開始する前に、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
Scrapy フレームワークを使用して、 Twitter データをクロールして Scrapy プロジェクトを作成します。ターミナルに次のコマンドを入力します。
scrapy startproject twittercrawler
このコマンドは、現在のディレクトリに「twittercrawler」という名前のプロジェクト フォルダーを作成します。このフォルダーには、いくつかの自動生成されたファイルとフォルダーが含まれます。
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
これらの構成オプションの機能は次のとおりです:
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 検索結果の「次のページ」を処理することで、より多くのデータを簡単に取得できます。
TwitterSpider クラスの作成が完了したら、ターミナルに戻り、作成したばかりの「twittercrawler」フォルダーに入り、クローラーを開始するには、次のコマンドを使用します。
scrapy crawl twitter -o twitter.json
このコマンドは、「twitter」という名前のクローラーを開始し、結果を「twitter.json」という名前のファイルに保存します。
これまで、Scrapy フレームワークを使用して Twitter データをクロールする方法を紹介しました。もちろん、これはほんの始まりにすぎません。TwitterSpider クラスを拡張してさらに多くの情報を取得したり、他のデータ分析ツールを使用して取得したデータを処理したりできます。 Scrapy フレームワークの使用法を学ぶことで、データをより効率的に処理し、その後のデータ分析作業をより強力にサポートできるようになります。
以上がTwitter データをクロールするための Scrapy フレームワークの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。