LoginSignup
6
4

More than 3 years have passed since last update.

【python】簡単クローリング&スクレイピングvol.1

Last updated at Posted at 2019-08-21

開発案件でPythonでクローリング&スクレイピングをする機会があったので、そこで新たに学んだことを使い、簡単にクローリング&スクレイピングをやってみます。

目標

日経電子版を対象にカテゴリー名を引数に指定カテゴリーページ1ページ分の全タイトルを返すだけの簡単なものをつくっていきます。

クローリング.png

上図の青枠で囲った記事タイトルを取得します。

また今回新たに学んだこととしてエラー処理についても簡単に実装します。

コード

from typing import List
import requests
from bs4 import BeautifulSoup


def get_nikkei_news(category: str) -> List[str]:
    """
    記事カテゴリーを指定して日経電子版のホームページをクローリング

    @param category: 記事カテゴリー
    @return:記事タイトルのリスト
    """
    titles = list()
    base_url = 'https://www.nikkei.com/'
    base_url_2 = '/archive/'
    try:
        response = requests.get(base_url + category + base_url_2)
        response.raise_for_status()

        response.encoding = response.apparent_encoding
        soup = BeautifulSoup(response.text, "html.parser")

        # スクレイピング
        title_list = soup.find_all('span', class_='m-miM09_titleL')
        for title in title_list:
            title_text = title.text
            titles.append(title_text)

    except requests.exceptions.HTTPError:
        print("{}カテゴリーページへのアクセス失敗".format(category))

    except Exception as e:
        print(e)

    return titles
title_name_list = get_nikkei_news("technology")
for title_name in title_name_list:
    print(title_name)

実行結果

オプト、AIで広告分類する仕組み開発
ディーカレット、仮想通貨を電子マネーにチャージ
トレードオフ破る非常識の無線通信、軍艦島で実証中
五輪の感染症対策 ワクチン接種と防蚊準備を
自動運転バス、既に実用化 福島第1原発を走っている
日本マイクロソフト、独SAPと連携してクラウド拡販
「総合証券サービス目指す」 LINE証券の一問一答
アルトア、「自撮り」の本人確認で融資可能に
[FT]逆転の発想が生んだ世界最大のAI用チップ
LINE、証券サービス開始 1株単位で取引可能

コード解説

  • try~except構文:発生した例外に応じたエラー処理ができる。try節の中でエラーが発生すると、そのエラーに対応したexcept節の処理へと移行する。
  • requests.get('url'):指定したURLに対してHTTPリクエストを送信し、サーバから返却されるHTTPレスポンスを戻り値として返す。
  • response.raise_for_status():ステータスコードが200番台以外だった場合エラーを起こす
HTTPステータスコード 意味
100番台 処理中
200番台 成功
300番台 リダイレクト
400番台 クライアントエラー
500番台 サーバーエラー
  • response.encoding = response.apparent_encoding:極力文字化けが起こらないようにコンテンツを取得できる
  • BeautifulSoup(response.text, "html.parser"):第一引数にHTML、第二引数にHTMLパーサーを指定できる。最初から使える html.parser を指定している。HTMLの字句解析をして、タグなどを判断してデータ構造として取得するプログラムをHTMLパーサーという。
  • soup.find_all('span', class_='m-miM09_titleL'):グの子孫要素を調べてフィルタにマッチする全ての子孫要素をリスト型で返す
  • except requests.exceptions.HTTPError::ステータスコードが200番台以外だった場合のエラー時の処理
  • except Exception as e::例外の内容を知る
6
4
3

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
6
4