Google検索で「soup」と検索したページのhtlmをrequests()で取得して、
その中の class=r の要素を抽出することを目的にして、
コマンドラインで下のようなコードを書きました。
>>> import requests, bs4 >>> res = requests.get('https://www.google.com/search?q=soup') >>> res.raise_for_status() >>> soup = bs4.BeautifulSoup(res.text) >>> elm = soup.select(".r") >>> len(elm) 0
しかしlen()で確認すると何もないという結果が帰ってきてしまいます。
soup.select()の引数に'.r'の代わりに"[class='r']"と書いてみても駄目でした。
何が問題でしょうか?
googleはスクレイピング等を禁止しています。
https://support.google.com/webmasters/answer/66357
試みないでください。この質問は取り下げてください(回答が付く前であればゴミ箱マークから削除依頼が可能です)。
print(soup) してみれば、目当てのHTML行がないことがわかります。
>shiracamusさん
プリントしてみたところ、確かに当てはまるHTML行がありませんでした。
ブラウザの「要素を調査」から開発者ツールで見た場合にはclass ='r'とあるのはなぜなんでしょうね…
とにかく原因がわかりました、ありがとうございます。
>hayataka2049さん
規約を読んだところ
>自動化されたクエリを Google から明示的な許可を事前に得ずに Google のシステムに送信することは禁止されています。
とのことですが、この質問では自動でなく手動です。問題はあるのでしょうか?
サーバー直下のrobots.txtを見れば、そのページをスクレイピング及びクローリングしてよいかはわかるはずです。「明示的な許可」とはこのことではないでしょうか。