Pythonで興行収入をクロールするMojo



Crawling Box Office Mojo With Python



記事のディレクトリ

序文

Box Office Mojoは、北米の映画の興行収入を掲載したWebサイトであり、業界で最も権威のあるWebサイトと呼ばれています。 良い
画像

アイデア

ウェブサイトを分析すると、リクエストされたURLを見つけることができます。ここでは、例として2011年のデータを分析します。
リクエストされたURLは次のとおりです:https://www.boxofficemojo.com/daily/2011/?view = year
URLには2011が含まれていますが、私はそれを言わないと確信しています。誰もがURLの作成方法を知っています。ここでは、変数を使用して2011を置き換えることができます。どの年のデータを取得するには、この変数を指定された年と等しくするだけで済みます。これでURL分析は終了です。Webページのデータを分析しましょう。
画像
データがWebページにテーブルの形式で表示されていることがわかります。その後、データを抽出するのは非常に簡単です。パンダを直接使用して、返されたWebページのソースコードを読み取ります。



コード

# !/usr/bin/env python # —*— coding: utf-8 —*— # @Time: 2020/1/5 17:03 # @Author: Martin # @File: crawl_bom.py # @Software:PyCharm import requests import pandas as pd # Original URL raw_url = 'https://www.boxofficemojo.com/daily/%s/?view=year' # Reptile head headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0 Win64 x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'} # Define the saved format writer = pd.ExcelWriter('./result/crawl_bom.xlsx', engine='openpyxl', mode='a') # Crawl data from 1977 to 2019 for i in range(1977, 2020): url = raw_url % i try: r = requests.get(url, headers=headers) if r.status_code == 200: df = pd.read_html(r.text) df = df[0] print(df) df.to_excel(writer, sheet_name=str(i), index=False) except requests.ConnectionError: print('Cannot get data for %s year!' % i) writer.save() writer.close()

注意

1. Webサイトにはクライミング防止メカニズムがあるため、リクエストを送信するときにリクエストヘッダーを偽装する必要があります
2.データを書き込むときに追加の方法が使用されるため、ファイルが存在することを確認する必要があります。存在しない場合、エラーが報告されます。

結果

画像