1. ホーム
  2. python

[解決済み] MarketWatchからデータを取得する

2022-03-02 09:25:36

質問

BeautifulSoupを使って、MarketWatchをスクレイピングしようとしています。

from bs4 import BeautifulSoup
import requests
import pandas


url = "https://www.marketwatch.com/investing/stock/khc/profile"
# Make a GET request to fetch the raw HTML content
html_content = requests.get(url).text

soup = BeautifulSoup(html_content, "lxml")

では、"を抜き出してみたいと思います。 現在のPER "と" 株価収益率 htmlにあるのはクラスです。

[...]
<div class="sixwide addgutter">

    <div class="block threewide addgutter">

        <h2>Valuation</h2>    
                <div class="section">    
            <p class="column">P/E Current</p>    
            <p class="data lastcolumn">19.27</p>    
        </div>    
                <div class="section">    
            <p class="column">P/E Ratio (with extraordinary items)</p>    
            <p class="data lastcolumn">19.55</p>    
        </div>    
                <div class="section">
            <p class="column">P/E Ratio (without extraordinary items)</p>
            <p class="data lastcolumn">20.00</p>
        </div>
                <div class="section">
            <p class="column">Price to Sales Ratio</p>
            <p class="data lastcolumn">1.55</p>
        </div>
                <div class="section">
            <p class="column">Price to Book Ratio</p>
            <p class="data lastcolumn">0.75</p>
        </div>
        [...]

どうすれば入手できますか?

私はコマンドを使用します

section = soup.findAll('div', {'class' : 'section'})

しかし、その後、私は私が興味を持っている値を取得するために先に行く方法がわからない、あなたは助けることができますか?

どのように解決するのですか?

このソリューションでは、以下のすべてのセクションからデータを取得します。 div クラス "sixwide addgutter" を持つ。結果は、辞書のリストという形になります。

soup = BeautifulSoup(req.content, 'lxml')

base = soup.find('div', attrs={'class' : 'sixwide addgutter'})
section = base.find_all('div', attrs={'class' : 'section'})

all_data=[]
for item in section:
    data = {}
    data['name']=item.p.text
    data['value']=item.p.findNext('p').text
    all_data.append(data)

出力サンプルです。

具体的に知りたい方は、"PER Current"と"Price to Sales Ratio"をご覧ください。 all_data[0] , all_data[3] をそれぞれ作成します。