【python】スクレイピング

2022/08/28に公開

はじめに

今日は目標としているシステムの最後の学習内容です。
スクレイピングでWebの情報を取得するロジックです。

使ったパッケージ

request

前回のAPIの記事で説明したHTMLのリクエストが行えるツールになっています。
contentやheaderの情報を取得できます。

https://note.nkmk.me/python-requests-usage/

インストールコマンド
$ pip install requests

BeautifulSoup

HTMLやXMLをpythonで使いやすいようにパースしてくれるライブラリです。
requestで読み込んだHTMLの情報をBeautifulSoupでパースして、変数や配列に変換したり直にDBに入れたりします。

https://qiita.com/Chanmoro/items/db51658b073acddea4ac

インストールコマンド
$ pip install beautifulsoup4

実際にpythonを組んでみました。

今回は野球のオーダーを取得するロジックを作りました。

実装

main.py
from db import session
from model import TestUserTable, TestUser
import requests
from bs4 import BeautifulSoup
 
url = "https://baseball.yahoo.co.jp/npb/game/2021006156/top"
 
r = requests.get(url)
 
soup = BeautifulSoup(r.content, "html.parser")

for tag in soup.find_all(True, attrs={"class": "bb-splitsTable__row"}):
    if len(tag.find_all(True, attrs={"class": "bb-splitsTable__data"})) == 5 :
        orderList = tag.find_all(True, attrs={"class": "bb-splitsTable__data"})
        print("{} {} https://baseball.yahoo.co.jp{}".format(orderList[0].string, orderList[2].a.string, orderList[2].a.get('href')))

結果

$ python main.py
先発 宮城 大弥 https://baseball.yahoo.co.jp/npb/player/1900087/top
1 福田 周平 https://baseball.yahoo.co.jp/npb/player/1700111/top
2 西野 真弘 https://baseball.yahoo.co.jp/npb/player/1400201/top
3 宗 佑磨 https://baseball.yahoo.co.jp/npb/player/1400196/top
4 吉田 正尚 https://baseball.yahoo.co.jp/npb/player/1500126/top
5 頓宮 裕真 https://baseball.yahoo.co.jp/npb/player/1800099/top
6 中川 圭太 https://baseball.yahoo.co.jp/npb/player/1800104/top
7 小田 裕也 https://baseball.yahoo.co.jp/npb/player/1400202/top
8 紅林 弘太郎 https://baseball.yahoo.co.jp/npb/player/1900088/top
9 伏見 寅威 https://baseball.yahoo.co.jp/npb/player/1200100/top
先発 與座 海人 https://baseball.yahoo.co.jp/npb/player/1700125/top
1 外崎 修汰 https://baseball.yahoo.co.jp/npb/player/1400184/top
2 源田 壮亮 https://baseball.yahoo.co.jp/npb/player/1600129/top
3 森 友哉 https://baseball.yahoo.co.jp/npb/player/1300100/top
4 山川 穂高 https://baseball.yahoo.co.jp/npb/player/1300101/top
5 栗山 巧 https://baseball.yahoo.co.jp/npb/player/12102/top
6 鈴木 将平 https://baseball.yahoo.co.jp/npb/player/1600130/top
7 愛斗 https://baseball.yahoo.co.jp/npb/player/1500102/top
8 オグレディ https://baseball.yahoo.co.jp/npb/player/1961079/top
9 呉 念庭 https://baseball.yahoo.co.jp/npb/player/1500105/top

最後に

本当はクーロンをDockerで実行する方法を探していたのだがCMD ["/start.sh"]という感じでaptでcrontabをインストールしようとしたがなかなかうまくいかず今回はこの辺の記事になってしまった。
時間がある時に深掘りしようと思う。

Discussion