31
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonでwebスクレイピング

Posted at

#はじめに
今回はwebスクレイピングについて紹介していきます. ちなみにwebスクレイピングはwebサイトから情報を獲得することです.

#環境
python3.6.3
macOS version10.14.2

#準備
まずはライブラリをインストールしましょう.
beautifulsoup4は, htmlからデータを取り出すライブラリです.
requestsは, httpでデータの通信を行うためのライブラリです.

$ pip install beautifulsoup4
$ pip install requests

#簡単な使い方
###ページ情報の取得
まずはwebページの情報を取得しましょう.
今回は, Sportsnaviから情報を取得します.
下記コードのURL部分を変更すれば, 異なるwebページでも利用できます.

# URL指定
url = "https://baseball.yahoo.co.jp/npb/stats/batter?series=1&type=1"
# Responseオブジェクト生成
response = requests.get(url)
# 文字化け防止
response.encoding = response.apparent_encoding 
# BeautifulSoupオブジェクト生成
soup = BeautifulSoup(response.text, "html.parser") 

###タグの取得
次はwebページからタグを取得しましょう.
タグの取得方法は様々あるので,いくつかを紹介します.

soup.find_all('a')  # HTMLから全てのaタグを取り出す. リストのように扱える. 
soup.find('a')  # 先頭の一つだけ取り出す.
soup.a  # soup.find('a')と同様

###条件を絞ったタグの取得
クラスや属性で条件を絞ってタグを取得することも可能です.

soup.find('div', id='main')  # divタグでidがmainのものを取得
soup.find_all("a", class_="link", href="/link")  # aタグでclassがlink, hrefが/linkのものを取得

タグを指定しなくてもオッケー.

soup.find(id='main')  # divタグでidがmainのものを取得
soup.find_all(class_="link", href="/link")  # aタグでclassがlink, hrefが/linkのものを取得

###タグの情報
取得したタグの情報は以下のように取得します.

soup.a.get('href')  # href属性を取得する
soup.a.text  # aタグの中身を取得する

###webページのHTMLを確認
任意の情報を取得するためには, webページのHTMLの情報が必要だと思います.
Chromeを使用している場合は, webページで右クリックを押すと「検証」とあるのでクリックしてください.
以下のように, そのwebページのHTMLが表示されます.
スクリーンショット 2019-05-19 21.01.39.png

#実践
今回は, Sportsnaviからプロ野球セリーグの打率上位10人についての情報を取得します.

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup

# URL指定
url = "https://baseball.yahoo.co.jp/npb/stats/batter?series=1&type=1"
# Responseオブジェクト生成
response = requests.get(url)
# 文字化け防止
response.encoding = response.apparent_encoding
# BeautifulSoupオブジェクト生成
soup = BeautifulSoup(response.text, "html.parser")

# 取得した情報を書き込む用のファイル
f = open('grade.txt', 'w')
# タグを取得
elems = soup.find_all("div", id='main')
# 順にファイルへ書き込み
for i in elems:
    f.write(i.text)
f.close()

### 以下, 取得した情報を整理しているのみ
grade = [[] for i in range(10)]
f = open('grade.txt', 'r')
lines = f.readlines()
flag =False
f.close()
num = 0
grade[0].append('1')
for line in lines:
    line = line.strip()
    if line == '':
        continue
    elif num > 9:
        break
    elif flag == True:
        grade[num].append(line)
        if len(grade[num]) == 27:
            num = num+1
    elif line == str(1):
        flag = True

print('セリーグ打率順位')
for i in range(10):
    print(str(grade[i][0])+" "+str(grade[i][1])+str(grade[i][2])+" "+grade[i][3])

実行結果は, 以下のようになります.
無事, webページから情報を取得できました.

セリーグ打率順位
1 青木 宣親(ヤ) .3441
2 鈴木 誠也(広) .3435
3 坂本 勇人(巨) .325
4 丸 佳浩(巨) .322
5 高橋 周平(中) .315
6 梅野 隆太郎(神) .313
7 糸井 嘉男(神) .312
8 筒香 嘉智(デ) .307
9 平田 良介(中) .299
10 野間 峻祥(広) .2967
31
37
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
31
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?