クラス名は同じだが 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 を使用しても機能する可能性があります。