1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでいろいろ作ってみたい! ~ニュース見出しチェッカー編~

Posted at

こんにちは

今日から勉強のためにPythonでいろいろ作っていこうと思い、
Pythonを勉強しながら、成果物を作る様子をお見せします!

成果物は何作るん?

ニュース見出しチェッカーを作る

ニュース見出しチェッカーは特定のニュースサイトからトップニュースを抜き出して
見出しを一覧で表示してくれるツールのことです(俺調べ)

これを作ることで何が学べる?

Webページから情報を集める「Webスクレイピング」を学ぶことができる!
これをマスターすりゃ俺の夢である競馬予想AIの開発に一歩近づく...
とはいえやったことがあるので復習のつもりで作成していきます

副題として

GitやGithubの使い方を思い出す意味でもこれらを使用しながら
いろいろ成果物を作成していきたいと思います!
スマホに作ったやつを入れられたら最高なんだけどな...
とりあえずPCで見られるようにしないとか...

さっそく作っていこう

まずはGithubでリポジトリを作成

リポジトリとはプロジェクトの設計図やソースコードを保管しておくための
保管庫のようなものです

まずはGithubにログイン!

↓↓ Githubの公式サイトです ↓↓
https://github.co.jp/

リポジトリを作りました!
基本的には"Repository name"と"Description"と"Add .gitignore"
を埋めていけば大丈夫かと思います!
image.png

リポジトリをコピー

リポジトリを作成した後、作業に移りたいので
そのための準備を進めていきます!
緑色の"<> Code"というところをクリックして
HTTPが選択されていることを確認して右側のコピーボタンを
クリックしてURLをコピーします
image.png

今回は私の環境であるWindowsで開発を行いますので、
Mac環境の方は自分の環境に合わせてお読みいただくか
すでにMac環境で詳しく解説されいる方の記事を
参考にしていただければと思います!

コピーしたら今度はPowerShellを開きます
今回は分かりやすいようにプロジェクトを保存しておく
場所を作成したうえで開発をしていきます

image.png

↑のような感じでフォルダを選択します
↓にコピー用のコマンドを書いておきます

フォルダを作成・移動する
    #Documentの中にProjectというフォルダを作成するため
    mkdir Documents/Projects
    #プロジェクトを保存したい場所に移動するため
    cd Documents/Projects

ここでGitを使用しますのでインストールされていない方は
Gitをインストールしてください!

↓↓ Gitのインストールはこちら! ↓↓
https://git-scm.com/downloads

んで、クローンを実行します

クローンを実行
    #クローンを実行
    git clone <コピーしたURL>

コピーしたURLを入れて実行すればOKです
次にプロジェクトフォルダに移動して終わりです

プロジェクトフォルダに移動
    #プロジェクトフォルダに移動する
    #今回の私はnews_checkerという名前にしてます
    cd news_checker

仮想環境の作成と有効化

※今回はWindows版ですのでご注意ください
※Windows版とMac/Linux版で異なりますのでご確認ください
※PowerShellのセキュリティレベルの変更が必要な場合もあります
※Pythonのインストールは各自でお願いいたします

ターミナルで先ほどのフォルダにいることを確認してから
以下のコマンドを実行します

新しいフォルダを作成する
    #venvという新しいフォルダを作成
    python -m venv venv

次に仮想環境を有効化していきます
以下のコマンドを実行します

仮想環境を有効化
    #仮想環境を有効化するコマンド
    .\venv\Scripts\activate

ここまで来たら最後にライブラリをインストールします!

ライブラリのインストール
    #ライブラリのインストール
    pip install requests beautifulsoup4

ここまでで開発の準備が完了しました!
ここからいよいよコーディングパートになります

準備ができたのでようやくコーディングに

Pythonファイルを作成する

今回はVScodeを使用します
VScode上でnews_checkerフォルダを開きます
開いたら新しくmain.py(今回はこう名付けましたがお好きな名前で)
というファイルを作成します
そこにコードを書いていきます

image.png

コーディング

今回はあくまで練習なのでYahoo!ニュースのトップページを
使用していき、ニュースを取得するコードを作成します
以下、そのままコピペで使えます(解説もします)

コード1_ニュースの取得
    # 必要なライブラリ(道具)をインポートする
import requests

# 情報を取得したいWebサイトのURL
# 今回は練習としてYahoo!ニュースのトップページを使います
URL = "https://www.yahoo.co.jp/"

print("Webサイトから情報を取得します...")

try:
    # requests.get()で、指定したURLにアクセスして情報を取得する
    # サーバーからの返事がresponseという変数に入る
    response = requests.get(URL)
    
    # HTTPステータスコードが良いか(200 OKか)を確認する
    # 200は「リクエスト成功」を意味する universal なコードです
    response.raise_for_status()
    
    print("情報の取得に成功しました!")
    
    # 取得したHTMLの中身を、最初の500文字だけ表示してみる
    # 全部表示すると長すぎるので、頭の部分だけ見て確認
    print("--- 取得したHTML(先頭部分) ---")
    print(response.text[:500])
    print("---------------------------------")

except requests.exceptions.RequestException as e:
    # アクセスに失敗した場合(インターネット接続がない、URLが間違っているなど)
    print(f"エラー:情報の取得に失敗しました。")
    print(e)

プログラムを実行してみる!

コマンドプロンプトを開いて、news_checkerフォルダにいることと
仮想環境が有効になっている(先頭に"venv"と表示されている)こと
の以上2点を確認したうえで、以下のコマンドを実行します!

プログラムの実行
    #プログラムの実行
    python main.py

成功すれば"情報の取得に成功しました!"と表示されます

最後にこの状態をGithubに保存します!

Githubに保存

変更内容を確認する

変更内容を確認する
    #Gitリポジトリの現在の状態を確認するコマンド
    #何が変更されて次になにをすべきかを教えてくれる!
    git status

保存したいファイルを指定

ファイルの指定
    #保存したいファイルを指定
    git add main.py

変更内容の記録をする(コミットする)

変更内容のコミット
    #コメントアウトで何をしたかが分かるメモを残します!
    git commit -m "WebサイトからHTMLを取得する基本機能を作成"

Githubに送信する(プッシュする)

Githubに情報をプッシュ
    #リポジトリに記録が送信される!
    git push

ちなみにちゃんとGithubのユーザー設定をしてから
コミット&プッシュをしましょう!
そうじゃないといつまでもGithubにプッシュされません!

コードの解説

ライブラリのインポート
    import requests

この文でライブラリのインポートをします
requestsというライブラリを使います!という宣言をしてる文です

URLの準備
    URL = "https://www.yahoo.co.jp/"

これはURLという変数にウェブサイトのアドレスを入れておく文です
いわゆる代入というやつです

安全装置
    try:
    # この中の処理を試してみて...
    ...
    except requests.exceptions.RequestException as e:
    # もし上でエラーが起きたら、代わりにこちらを実行する
    ...

これはもしもの場合の安全装置です
try:ブロックの中のコードを実行しようと試みるが、
もし途中でエラーが発生してもプログラムを強制終了せずに
except:ブロックの処理を実行します
これがないとエラーが起きた瞬間にプログラムが
クラッシュしてしまいますのでめちゃ大事な文になってます

Webサイトへのアクセス
    response = requests.get(URL)

インポートしたrequestsライブラリのget()を使用して
変数URLに入っているアドレスにアクセスをしています
サーバーからの応答がそのままresponseという名前の変数に格納されます

応答のチェック
    response.raise_for_status()

サーバーからの応答が成功だったか失敗だったかを確認します
もし失敗であればここでエラーを発生させて処理を中断して、
exceptブロックに処理を移します

結果の表示
    print("情報の取得に成功しました!")
    print(response.text[:500])

response.textには、取得したWebページのHTMLが
すべての文字列として入っていますが、全部表示すると
画面が文字だらけになってしまうので、[:500]という
スライシング(切り取り)機能を使っています

エラーが発生したら
    print(f"エラー:情報の取得に失敗しました。")
    print(e)

try:ブロックの途中でエラーが発生した場合にのみ実行される
print(e)のeには、発生したエラーの詳細情報が入っています
これを表示することで、なぜ失敗したのかという原因を
突き止めるヒントが得られます!

必要な情報を抜き出す!

見出しのアドレスを調べる

まずは、ニュースサイトを開きます!今回はYahooでやります
見出しを右クリックすると「検証」と出てくるので
それをクリックします!すると...
image.png
image.png
↑のような画面が出てきます!

ここ使う!メモ!
    <span class="fQMqQTGJTbIMxjQwZA2zk _1alzSpTqJzvSVUWqpx82d4">

それで、↑↑の部分はこのあと使いますのでメモしておきましょう!
ここから見出しの文を取ってくるのでメモしておかないと
コードが完成できません!

コードを更新する

ここでmain.pyを更新します
以下、そのままコードを使用できます!上書きしてください!

コード2_ニュースの取得_見出し
    # 必要なライブラリ(道具)をインポートする
import requests
from bs4 import BeautifulSoup  # BeautifulSoupを追加

# 情報を取得したいWebサイトのURL
URL = "https://www.yahoo.co.jp/"

print("Webサイトから情報を取得します...")

try:
    # requests.get()で、指定したURLにアクセスして情報を取得する
    response = requests.get(URL)
    response.raise_for_status() # エラーチェック
    
    print("情報の取得に成功しました!")
    
    # BeautifulSoupを使って、取得したHTMLを解析(パース)する
    # response.textでHTMLの文字列を取得し、"html.parser"で解析するよう指定
    soup = BeautifulSoup(response.text, "html.parser")
    
    # soup.find_all()を使って、指定した要素をすべて見つけ出す
    # 最初の引数に「タグ名」、次のclass_引数に「クラス名」を指定します
    elements = soup.find_all("span", class_="fQMqQTGJTbIMxjQwZA2zk _1alzSpTqJzvSVUWqpx82d4") # 例:Yahooニュースの主要トピックス
    
    print("\n--- ニュース見出し一覧 ---")
    # 見つかったすべての要素を一つずつ処理する(forループ)
    for element in elements:
        # .get_text()で、HTMLタグを取り除いたテキスト部分だけを取得する
        title = element.get_text()
        print(title)
    print("--------------------------")


except requests.exceptions.RequestException as e:
    # アクセスに失敗した場合
    print(f"エラー:情報の取得に失敗しました。")
    print(e)

ここで、python main.pyを実行してニュースの見出しが
一覧で出てくれば、成功です!
image.png
(ヨッシャ...Webスクレイピング習得だぜ...)

Githubに保存

忘れてはいけないのがGithubに保存する手順です

Githubへの保存の手順
   git status
    git add main.py
    git commit -m "見出しを抽出して表示する機能を追加"
    git push 

というわけで完成!

まだまだこれからバージョンアップしていけそう

一旦、完成しましたね!
Webスクレイピングは基本ですのでまだまだここから
いろいろ改良しがいがありますね!
色々考えてみて今後もバージョンアップをしていこうと思います!

Githubの使い方も思い出してきた

だいぶ古い記憶を辿りつつ、調べつつで進めましたが
ちゃんとGithubを使用することができてよかったです
これからも活用していこう!
今度はGithub上でAI開発しましょうかね
今はColab上でやっているので...
繋ぐ方法あればぜひ教えていただきたいです...

まとめ

というわけでWebスクレイピングを使用しつつ
ニュースの見出しを出力する「ニュース見出しチェッカー」を
作ってみました!
今後のアップデートに期待だぜ!
それではまた今度!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?