質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2090閲覧

td要素を指定して取得する方法について

tjagwmdj

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/08/21 05:55

前提・実現したいこと

pythonで株式サイトの下記tableの太字部分のa、td要素を取得したいと考えています。
td要素を出力するコードまでは作成出来たのですが、td要素の指定方法が分からず困っています。
どうすればtd要素を指定して取得出来るでしょうか?
分かる方ご教授お願いします。

http://www.morningstar.co.jp/StockInfo/pts/ranking

<table class="sr-tbl" style="width:100%;"> <thead> <tr> <th id="h_rank" class="tac">順位</th> <th id="h_code" class="tac">コード</th> <th id="h_brand">銘柄名</th> <th id="h_main">主要</th> <th id="h_price" colspan="2">現在値</th> <th id="h_reference" colspan="2" class="special">基準値比</th> <th id="h_volume">出来高</th> <th id="h_turnover">売買代金</th> </tr> </thead> <tbody>
<tr> <td class="tac"><a href="info/9966" target="_blank">1</a></td> **<td class="tac"><a href="info/9966" target="_blank">9966</a></td>** <td class="tac"><a href="info/9966" target="_blank">藤久</a></td> <td class="tac">東証1部</td> <td class="tac" style="width:70px;">08/21 08:32</td> **<td class="tar" style="width:70px;">2,286</td>** **<td class="tar" style="width:70px;">400</td>** <td class="tar t_reference special" style="width:70px;">21.21%</td> <td class="tar t_volume">6,100</td> <td class="tar t_turnover">13,944,600</td> </tr> <td class="tac"><a href="info/5212" target="_blank">2</a></td> **<td class="tac"><a href="info/5212" target="_blank">5212</a></td>** <td class="tac"><a href="info/5212" target="_blank">不二硝</a></td> <td class="tac">JASDAQ</td> <td class="tac" style="width:70px;">08/21 13:14</td> **<td class="tar" style="width:70px;">627</td>** **<td class="tar" style="width:70px;">100</td>** <td class="tar t_reference special" style="width:70px;">18.98%</td> <td class="tar t_volume">2,000</td> <td class="tar t_turnover">1,254,000</td> </tr>

該当のソースコード

import requests, bs4
res = requests.get('http://www.morningstar.co.jp/StockInfo/pts/ranking')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "html.parser")

soup.select("tr")

table = soup.findAll("table")[0]
rows = table.findAll("tr")

for row in rows[:3]:
for col_n, cell in enumerate(row.select('td')):
print(col_n, cell.get_text())
______________________
0 1
1 9966
2 ���v
3 ���؂P��
4 08/21�@08:32
5 2,286
6 400
7 21.21%
8 6,100
9 13,944,600
0 2
1 5212
2 �s���
3 �i��r�c��p
4 08/21�@11:30
5 627
6 100
7 18.98%
8 500
9 313,500

試したこと

col_n→col_n〔2〕などで指定できないか試しましたが取得出来ませんでした、、、

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/08/21 06:14

> どうすればtd要素を指定して取得出来るでしょうか? row.select('td') と、出来ているのでは?
meg_

2020/08/21 07:05

> td要素を出力するコードまでは作成出来たのですが、td要素の指定方法が分からず困っています。 "td要素を出力する"ことが出来たということはtd要素は取得済かと思いますが。
tjagwmdj

2020/08/21 08:09

ご回答ありがとうございます。 td要素の出力は出来たのですが、そのtd要素から指定のtd要素を出力したいです。 (質問の出力結果でいうと、1に該当する9986、5212などのtd要素) プログラミング超初心者で稚拙な質問をしてしまい申し訳ありません。
meg_

2020/08/21 08:26

質問のコードでいうと「cell」がtd要素そのものだと思いますが。 > col_n→col_n〔2〕などで指定できないか試しましたが取得出来ませんでした、、、 添え字指定したいなら「row.select('td')[0]」とかでしょうか?
tjagwmdj

2020/08/21 08:42 編集

td_list = row.select('td') elem = td_list[1] elem1 = td_list[5] elem2 = td_list[6] print(elem.text) print(elem1.text) print(elem2.text) で無事取得出来ました。ご親切にご回答ありがとうございました。 多分これをfor文で綺麗にしないといけないと思うので頑張ってみます。
guest

回答1

0

ベストアンサー

pandas の pd.read_html() を使えば、 DataFrame として表データをとってこれます。
DataFrame なので、あとは銘柄名とかコードとかでほしいデータだけ抽出することが可能です。

python

1import pandas as pd 2 3df, = pd.read_html("http://www.morningstar.co.jp/StockInfo/pts/ranking") 4df

イメージ説明

投稿2020/08/21 10:44

編集2020/08/21 10:45
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tjagwmdj

2020/08/21 23:19

dataframeにしたところ、簡単に要素を抽出出来ました。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問