如何抓取网站以获取需要订购的多个值

我正在尝试使用beautifulsoup抓取NHL游戏的结果,但是我很难弄清楚如何获得游戏进行的日期和结果。游戏的日期在标签下,结果在“ field-content”类中。目前,我能够找到两个值并将它们放在独立变量中,但我想保持它们在原始网站中出现的顺序,并将数据放在单个变量中。

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen("https://www.jatkoaika.com/nhl/ottelut").read()

soup = bs.BeautifulSoup(sauce,features="html.parser")

dates = str(soup.find_all("h3"))
dates = dates.replace("<h3>","").replace("</h3>","")

games = str(soup.find_all("span",{"class": "field-content"}))
games = games.replace('<span class="field-content">',"").replace("</span>","")
lk38264945 回答:如何抓取网站以获取需要订购的多个值

解析此站点的困难是缺少标题元素和要解析的游戏的层次结构。它们都是同一元素的内容。

使用以下CSS选择器将h3元素和具有field-content类的跨度获取到一个数组中

games = soup.select("h3,span.field-content")

输出:

[<h3>Ma 28.10.2019 runkosarja</h3>,<span class="field-content">Chicago - Los Angeles</span>,<span class="field-content">NY Islanders - Philadelphia</span>,<span class="field-content">NY Rangers - Boston</span>,<span class="field-content">Ottawa - San Jose</span>,<span class="field-content">Vegas - Anaheim</span>,<h3>Ti 29.10.2019 runkosarja</h3>,...
]

现在您可以使用以下代码将游戏分组到日期

from collections import defaultdict
dates_with_games = defaultdict(list)
for e in games:
    if (e.name == 'h3'):
        latestH3 = e.text
    else:
        dates_with_games[latestH3].append(e.text)

您会得到一个像这样的字典

 {'Ma 28.10.2019 runkosarja': 
  ['Chicago - Los Angeles','NY Islanders - Philadelphia','NY Rangers - Boston','Ottawa - San Jose','Vegas - Anaheim'],'Ti 29.10.2019 runkosarja': 
    ['Buffalo - Arizona','Vancouver - Florida'],...
 }
本文链接:https://www.f2er.com/3166595.html

大家都在问