繁体   English   中英

有没有办法在 bs4 中抓取 div id?

[英]Is there a way to scrape a div id in bs4?

有多个 div 类具有相同的类名但具有不同的 id:

<div class ="starting-lineups__matchup" 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'类都有一个与之关联的数字。 用户手动输入此数字以抓取该特定类中的数据。 在上面的代码中,这只是客队名称starting-lineups__team-name--away

为了找到每个游戏的编号,我一直在检查网页。 不必亲自访问网站并查看 html,我想抓取该数字以及与之相关的团队名称。

你也许可以使用这个:

from bs4 import BeautifulSoup import re

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

这将列出每个带有“data-gamepk”属性的div。

PS:使用 True 而不是 re.compile(r".*") 也可能有效。

我希望我能正确理解您的问题:此脚本将打印比赛编号和主/客队名称:

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
--------------------------------------------------------------------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM