ホームページ >バックエンド開発 >Python チュートリアル >Webスクレイピングと外国語データの分析
最近、簡単な Web スクレイピングとデータ分析プロジェクトを実行したいと決心しました。私の脳は、時間がかかりそうな大きなアイデアを思いつくのが好きなので、数時間で実行できそうな簡単なものを思いつくことに挑戦することにしました。
私が思いついたのは次のとおりです:
私の学位はもともと外国語 (フランス語とスペイン語) だったので、言語関連のデータを Web スクレイピングするのは楽しいだろうと思いました。 BeautifulSoup ライブラリを使用したかったのですが、このライブラリは静的 HTML を解析できますが、データセット全体を表示するために onclick イベントを必要とする(つまり、ページ分割されている場合はデータの次のページをクリックするなど)動的 Web ページを処理できません。
私は、最も一般的に話されている言語をまとめたこの Wikipedia ページを使用することにしました。
次のことをしたかったのです:
関心を分離するためにプロジェクトをこれらのステップに分割することにしましたが、スクリプトを再実行して Wikipedia から HTML を取得するために複数の不必要なリクエストを行うことも避けたかったのです。 HTML ファイルを保存して、別のスクリプトでそれを操作すると、データはすでにあるため、データを再リクエストする必要がなくなります。
このプロジェクトの github リポジトリへのリンクは次のとおりです: https://github.com/gabrielrowan/Foreign-Languages-Analysis
まず、htmlを取得して出力しました。 C# と C を使った後は、Python コードがいかに短くて簡潔であるかにいつも驚かされます。
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
美しいスープで HTML を解析し、興味のあるテーブルを選択するには、次のようにしました。
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
次に、パンダ データフレームの列名を取得するためのテーブル ヘッダー テキストを取得しました。
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
その後、データフレームを作成し、列名を設定し、テーブルの各行を取得して、各行をデータフレームに書き込みました。
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
注 -strip() を使用しないと、テキスト内に不要な n 文字が含まれていました。
最後に、データフレームを .csv に書き込みました。
事前に、データから答えたい次の質問を考え出します。
これらの質問すべてに答えるためにコードを詳しく説明するつもりはありませんが、チャートに関係する 2 つの質問について説明します。
まず、ブランチ名が「Romance」または「Germanic」である行のみを含むデータフレームを作成しました
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
次に、グラフに必要な x 軸、y 軸、バーの色を指定しました。
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
これにより作成されました:
円グラフを作成するために、最も一般的な上位 3 つの言語ファミリーを取得し、これらをデータフレームに入れました。
このコード グループは、言語族ごとのネイティブ スピーカーの合計を取得し、降順に並べ替えて、上位 3 つのエントリを抽出します。
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
次に、「ネイティブ スピーカー」の Y 軸と凡例を指定して、データを円グラフに配置します。これにより、グラフに表示される言語ファミリーごとに色分けされたラベルが作成されます。
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
残りの質問のコードと回答はここにあります。ノートにマークダウンを使用して質問とその回答を書きました。
次回の Web スクレイピングとデータ分析プロジェクトでは、以下を使用して物事をより複雑にしたいと思います。
あっという間のプロジェクトでしたが、このプロジェクトは楽しかったです。短くて管理しやすいプロジェクトが、実践担当者を獲得するのにどれほど役立つかを思い出しました。さらに、たとえ小さなデータセットであっても、インターネットからデータを抽出してそこからグラフを作成するのは楽しいものですか?
以上がWebスクレイピングと外国語データの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。