You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python BeautifulSoup的Berghain网站数据爬取问题及解决

爬取Berghain活动数据的问题与解决

我正在开展数据分析项目,需要用Python的BeautifulSoup爬取某活动页面的以下数据:

  • 日期:06.07.2027
  • 舞台:Berghain、Panorama Bar、Garten
  • 时间表
  • 艺人
  • 厂牌

最终计划将采集到的数据导入SQL,构建成指定的表格结构。

目前我在爬取初期遇到了瓶颈,只能通过以下代码获取第一个艺人的名称:

import requests
from bs4 import BeautifulSoup

url = 'https://www.berghain.berlin/en/event/77218/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
soup.find('div', class_='running-order-set__info').find('span').contents[0]

运行结果:'Norman Nodge'

我仅成功获取到第一位艺人的名字,不知道如何采集其他所需信息,希望能得到帮助完成这个项目。


更新
在@Andrej Kesely的解答帮助下,我解决了问题。我对代码进行了调整,将数据存入DataFrame:

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://www.berghain.berlin/en/event/77218/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

dates = []
names = []
stages = []
times = []
artists = []
notes = []

for li in soup.select('main li'):
    date = li.find_previous('p')
    dates.append(date.get_text(strip=True, separator=' ').split()[1])

    name = li.find_previous('h1')
    names.append(name.get_text(strip=True))

    stage = li.find_previous('h2')
    stages.append(stage.get_text(strip=True))

    time = li.time.text
    times.append(time)

    artist = li.select_one('.running-order-set__info span')
    artists.append(artist.contents[0] if artist.contents else 'NaN')

    notes.append(artist.span.text if artist.span else 'NaN')

bh_df = pd.DataFrame(
{'date': dates,
'party_name': names,
'stage': stages,
'start_time': times,
'artist_name': artists,
'note': notes
})

运行后得到了包含日期、活动名称、舞台、开始时间、艺人名称、备注字段的DataFrame,数据结构符合预期。

内容的提问来源于stack exchange,提问作者ihavenoideawhatimdoing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:58:24