基于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
相关产品推荐
相关产品推荐

