Python - BS4 で div ID をスクレイピングする方法はありますか?

okwaves2024-01-25  8

クラス名は同じだが ID が異なる複数の div クラスがあります:

<div class ="スターティングラインアップ__マッチアップ" data-gamepk="******">

これらのクラス内で必要なデータをスクレイピングすることはできますが、data-gamepk の値を見つけるためにページを検査する必要があり続けます。その数を収集する方法はありますか?

これが私がスクレイピングしているサイトと以下のコードです:

https://www.mlb.com/starting-lineups

#main table that contains the data
gamelist = soup.find('div',attrs={'class':'starting-lineups__container-multi'})

user = input()

#game specific data
game = gamelist.find('div',attrs={'data-gamepk':user})

#loop through away team name
for teams in game.find_all('span',attrs={'class':'starting-lineups__team-name--away'}):
    for team_a in teams.find_all("a"):
        print(team_a.text)

つまり、「starting-lineups__matchup」という名前のクラスはすべて「starting-lineups__container-multi」クラス内にあります。すべての「starting-lineups__matchup」クラスには番号が関連付けられています。ユーザーはこの数値を手動で入力して、その特定のクラス内のデータを収集します。上記のコードでは、単に t になります。彼はアウェイのチーム名 starting-lineups__team-name--away。

各ゲームの番号を見つけるために、Web ページを調べています。 Web サイトにアクセスして HTML を自分で確認する代わりに、その番号とそれに関連付けられたチーム名を取得したいと考えています。

URLを投稿しますか?それともコードですか?

– カルティク

2020 年 9 月 3 日 15:34

HTML コードの完全なスニペットと抽出しようとしているデータを追加してください。

– dtell

2020 年 9 月 3 日 15:40

要素を取得したら、属性を取得できます。たとえば、次のようなものになります。Soup.find('div',{'class':'starting-lineups__matchup'})['data-gamepk& #39;]

– chitown88

2020 年 9 月 3 日 15:46

投稿を編集したところです。わかりやすくなれば幸いです。

– セブンカードスタッド

2020 年 9 月 3 日 15:49



------------------------

質問が正しく理解できたと思います。このスクリプトは試合番号とホーム/アウェイ チーム名を出力します。

import requests
from bs4 import BeautifulSoup


url = 'https://www.mlb.com/starting-lineups'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

for game in soup.select('[data-gamepk]'):
    print(game['data-gamepk'])
    print(game.select_one('.starting-lineups__team-name--away').get_text(strip=True))
    print(game.select_one('.starting-lineups__team-name--home').get_text(strip=True))
    print('-' * 80)

プリント:

631112
Cubs
Pirates


------------------------



------------------------

-------- 631432 Rangers Astros

------------------------



------------------------

-------- 631146 Nationals Phillies

------------------------



------------------------

-------- 631234 Yankees Mets

------------------------



------------------------

-------- 631368 Padres Angels

------------------------



------------------------

-------- 631614 Blue Jays Red Sox

------------------------



------------------------

-------- 631405 White Sox Royals

------------------------



------------------------

-------- 631370 D-backs Dodgers

------------------------



------------------------

-------- 631055 Athletics Mariners

------------------------



------------------------

--------

0



------------------------

これを使用できるかもしれません:

from bs4 import BeautifulSoup import re

soup= BeautifulSoup(html.text,'lxml') 
results = soup.findAll("div", {"data-gamepk" : re.compile(r".*")})

これにより、「data-gamepk」を持つすべての div がリストされます。属性。

追記: re.compile(r".*") の代わりに True を使用しても機能する可能性があります。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。