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

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

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

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

Beautiful Soup

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

HTML

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

Q&A

解決済

1回答

680閲覧

Python Beautiful Soupでスクレイピング

NakaKou

総合スコア19

スクレイピング

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

Beautiful Soup

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Python

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

HTML

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

0グッド

2クリップ

投稿2020/04/20 16:35

# Google検索結果から必要な要素を__Python__で__Web__スクレイピング

ステータス

訳があって友人からこのサイトを紹介されて取り組むことになりました。

自分は__Python__はある程度知っていますが、__HTML__とブラウザ関係のことは触れたことがありません。

問題

サイトに乗っているプログラムの一部、検索結果タイトルとリンクの取得検索結果の説明部分を取得の出力がどちらも空白の配列が帰ってきてしまいます。

Python

1list_keywd = ['機械学習','統計'] 2resp = web.get('https://www.google.co.jp/search?num=100&q=' + ' '.join(list_keywd)) 3resp.raise_for_status() 4 5# 取得したHTMLをパースする 6soup = bs4.BeautifulSoup(resp.text, "html.parser") 7# 検索結果のタイトルとリンクを取得 8link_elem01 = soup.select('.r > a') 9# 検索結果の説明部分を取得 10link_elem02 = soup.select('.s > .st')

取り組み

select内の.rclassを指定して、aがタグを示すことはわかりました。
でも、調べてみると別の書き方があるそうで、そちらでプログラムを書き直しました。

Python

1b_soup = bs4.BeautifulSoup(resp.text,"html.parser") 2 3link_title = b_soup.find_all("div",class_="main") 4print(link_title)

しかし、これでは自分が欲しいタイトルとリンク、説明文をうまく取り出すことができませんでした。

悩んだ自分は、URLに問題があると思いシンプルなサイトのURLを使って試してみました。
すると、自分の望んだ通りの結果が得られました。
なので問題はGoogleのURL(検証のHTML)にあると思います。

質問

このサイトのプログラムを使って検索結果からタイトルやURL、説明を取得したいのですがどうすればいいでしょうか?

GoogleのURL(検証)内の<div id="main">の中にある各記事にアクセスしてタイトルなどを取得するためにはどうしたらいいですか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

中途半端な回答で申し訳ないのですが、ちょっと調べてみました。

Python

1with open('output.html','w',encoding='utf8') as f: 2 f.write(resp.text)

のようなコードで、取得したHTMLをローカルファイルに保存して、
Chromeの検証ツールで見たところ、以下のようになりました。

![イメージ説明]

イメージ説明

'.r > a''.s > .st'といった単純なCSSセレクターでは取得できないようです。

ですので、これらのローカルファイルの情報を元にスクレイピングするか、
あるいはSeleniumのようなWebドライバーを使うなどの方法を検討してみるか、、、
という感じになると思います。

投稿2020/04/21 01:11

autumn_nsn

総合スコア335

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

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

NakaKou

2020/04/21 20:46

回答ありがとうありがとうございました。 autumn_nsnさんの「一度ローカルにhtmlを保存」をおこなったら扱いやすくなりました!! 結局はBeatutifulSoupの仕様が少し理解仕切れてなかったみたいです。 でも、扱いにくい部分をあったので正規表現を使って完結させました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問