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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

HTML

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

Q&A

解決済

1回答

803閲覧

BeautifulSoup4を用いてサイト要素の取得を行いたい(class要素がないので取得ができない)

WorkingAtSinjuk

総合スコア2

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

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

HTML

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

0グッド

0クリップ

投稿2020/08/10 09:26

編集2020/08/10 10:22

前提・実現したいこと

BeautifulSoup4を用いて以下、サイトの要素を取得しDateFrameを活用してタイトルをindex、月日を列、タイトルを行とした表を作成したい。

<div class="box_title info"> <a href="/hogehoge/01">タイトル01</a> <span class="info">8月31日</span> </div>, <div class="box_title info"> <a href="/hogehoge/02">タイトル02</a> <span class="info">8月7日</span> </div>, <div class="box_title with-info"> <a href="/hogehoge/03">タイトル03</a> <span class="info">8月2日</span> </div>

※前提として、各ライブラリーのimportを行い以下を実行し上記のHtml要素を取得している。

url = "https://hogehoge" response = req.urlopen(url) parse_html = BeautifulSoup(response,'html.parser') title_lists = parse_html.find_all('div', class_='box_title')

上記行った結果表題に記載しているhtml要素を取得しました。
0. 月日に関しては以下実行しprintにて表示確認できたのですが

Date = parse_html.find_all('span', class_='info') Date[1:4]

表示結果

[<span class="info">8月31日</span>, <span class="info">8月7日</span>, <span class="info">8月2日</span>]

発生している問題

2. aタグのテキストデータを取得しようと模索しているのですがうまく要素の取得ができない状況でfindで単一要素の取得はできるもののaタグ全てのテキストが取得できない状況です。

試したこと

title_lists = parse_html.find_all('div', class_='box_title') a = div.find("a") print(p.string)
エラーメッセージ NameError: name 'div' is not defined

以下のように試したものの一つの値しか取得できずfind_allするのかな....と思ってます。

parse_html.find('div', class_='box_title').find_all('a')

この辺で詰まって頭打ちになっております。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

otn

2020/08/10 09:53

プログラムとデータが一致してないので、どちらを信じて良い物やら。
WorkingAtSinjuk

2020/08/10 10:05

ご回答ありがとうございます! 失礼いたしました。以下が正しいですね....。 ``` title_lists = parse_html.find_all('div', class_='box_title') a = div.find("a") print(p.string) parse_html.find('div', class_='box_title').find_all('a') ```
otn

2020/08/10 10:07 編集

ここに書くのじゃ無くて、質問を修正しましょう。 他の部分もクラス名が間違ってます。
guest

回答1

0

ベストアンサー

find_allするのはaじゃなくてdivですね。その一つ一つのdivに対してfind("a")します。

投稿2020/08/10 09:58

otn

総合スコア85901

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

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

WorkingAtSinjuk

2020/08/10 10:07

早速ありがとうございます! title_lists = parse_html.find_all('div', class_='box_title').find('a') とすると以下のエラーになってしまい.... ResultSet object has no attribute 'find'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
otn

2020/08/10 10:08

いや、「その一つ一つのdivに対して」を読み落としてます。
WorkingAtSinjuk

2020/08/10 10:27

なるほどですね!!非常に助かりました!!!解決することができました!!!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問