【Python】BeautifulSoupでcontentやtextが取得できない

Pythonを使ってのスクレイピング

投資で、自分自身が見たいと思っていることなんかをPython使ってまとめられたら便利だなというところから。

そのため株のデータ取得などをやりたいと思いBeautifulSoupでのrequestをすることでスクレイピングしたいと思っていました。

ただ、最初からrequestでgetした内容を見ても全く中身(content、text)が取得できなかったので、メモ残します。

BeautifulSoupでcontentやtextが取得できないサイト

今回、取得できなかったサイトは、
https://stockcharts.com/

ここから必要なデータを取得したいと思いました。

と思いましたが、最初からつまづきました。
下記のようにやっても、何も取れません。

import requests
from bs4 import BeautifulSoup

url = "https://stockcharts.com/"
response = requests.get(url)

soup = BeautifulSoup(response.content, "html.parser")

print(soup)

ちなみにURLをhttps://www.yahoo.co.jp/だったり
https://finviz.com/に変えてみたら、バーっとcontent取れたので、
書き方が間違っているではなさそう。

requestsで返ってくるページ内容が自分がchromeなどで見ているのと異なる

いろいろ調べて見ると、
requestでダウンロードしたhtmlが、ブラウザを通して表示されるhtmlが違うようでした。

このサイトあたりが参考になりました。

【私が実施した解決方法】BeautifulSoupにてuser agentの設定

先に実施したコードを記載します。

import requests
from bs4 import BeautifulSoup

url = "https://stockcharts.com/"
header = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36"}


response = requests.get(url, headers=header)

soup = BeautifulSoup(response.content, "html.parser")

print(soup)

変更を加えたのは、下記の2点だけです。

  • headerという変数を作り、user-agentを設定

  • getの部分でheader(user-agent)を指定してあげる

これで一応contentが取得できました。

なお、今使っているブラウザのuser agentの確認は下記でできます。

↓にあるように、ブラウザのユーザーエージェントってやつをコピーする

終わり

※ちなみにですが、この内容を取得できたところで使いませんでした😇😇


この記事が気に入ったらサポートをしてみませんか?