「かぶたん」に、注目キーワードのページがある。これを毎日記録して注目銘柄のトレンドを追いたいと思っていたので、Pythonでのデータ取得するスクリプトを組んでみようと考えた。

 

Q:pythonで、以下のページから注目銘柄の情報を取得するプログラムをコーディングしてください。 https://kabutan.jp/info/accessranking/3_2

 

A:

申し訳ありませんが、私はウェブページのURLを直接使用してコードを生成することはできません。ただし、ページの内容に基づいてPythonスクリプトの例を提供すること・・・

 

こう聞いてしまうと「データ取ってきて」という指示になってしまうので、「サンプルコードを書いてね」という言い方にしないと言うことを聞いてくれない。

 

Q:以下のWebページを例に、Webからデータを取得するスクリプトの例を書いてください。 https://kabutan.jp/info/accessranking/3_2

 

A:申し訳ありませんが、特定のウェブページのURLを提供することはできません。しかし、一般的なWebスクレイピングのスクリプトの例を提供することは可能です。以下はPythonを使用した基本的なWebスクレイピングのコード例です:

 

~~ コード例を表示 ~~

 

コード例には、HTMLで拾いたいタグを書くようになっていたが、<tr>のように「<>」を付けていたが、それがよくなかったようだ。

 

コードを出力結果を貼り付け、出力結果が期待どおりになるまでに14回のキャッチボールを行いました。

 

-----

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 対象のURL
url = 'https://kabutan.jp/info/accessranking/3_2'

# リクエストを送信してHTMLを取得
response = requests.get(url)
html = response.content

# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html, 'html.parser')

# idが'main'の要素を抽出
main_div = soup.find(id='main')

# 必要なデータを抽出
rows = main_div.find_all('tr')

# 各行のデータを取得
data = []
for i, row in enumerate(rows):
    cols = row.find_all('td')
    cols = [col.text.strip() for col in cols]
    if len(cols) >= 3:  # 3列目が存在する場合
        split_data = cols[2].split('、')  # 3列目のデータを「、」で分割
        cols = cols[:2] + split_data  # 分割したデータを複数のセルに格納
    if i in [1, 2, 3]:  # 2行目、3行目、4行目の場合
        cols[0] = str(i)  # 1列目にiを出力
    data.append(cols)

# データフレームを作成
df = pd.DataFrame(data)

# Excelファイルに出力
df.to_excel('output.xlsx', index=False)

----

 

これ、1から勉強してコード書いてデバッグして調べて、、、を繰り返すと2時間くらいは余裕で掛かるだろう。それが30分もかからずに期待する結果が出るというすばらしさ!!

 

さて、もうちょっと運用に耐えるように出力の仕方を工夫して、毎日自動で取得してデータ蓄積するように環境設定しますかね。