This is the website I am scraping.
我在Jupyter中使用BeautifulSoup,我想知道如何才能从该网站上获取事件名称,位置和价格。我在检查工具中找到了它们的位置。
现在我找到了活动名称,但我觉得我的过程很漫长且不必要。
我的计划是将所有从该页面抓取的事件数据放入数据框。
import pandas as pd
import requests
import bs4
from bs4 import BeautifulSoup
kpbs_link = "https://www.kpbs.org/events/search/?unifyevents=true&vertical_events=true&base_arts=true&base_category=137/"
page = requests.get(kpbs_link)
soup = BeautifulSoup(page.text)
events = soup.find_all('h4', {"class": "list_title"})
我觉得将其放置在阵列中并进行清洁非常漫长而乏味,有没有更快,如何做的方法。我已经用漂亮的汤从Wikipedia上删除了数据,但是他的网站却乏味。
答案 0 :(得分:2)
您可以尝试运行以下代码。您需要注意成本要素,因为并非所有事件都存在该要素,因此我为处理该要素设置了条件。它从页面中提取事件的名称,位置和价格的列表元素:
import requests
from bs4 import BeautifulSoup
import pandas as pd
name = []
location = []
price = []
url = "https://www.kpbs.org/events/search/?unifyevents=true&vertical_events=true&base_arts=true&base_category=137" # no trailing /
try:
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
items = soup.find_all("li", {"class": "item"})
for item in items:
name.append(item.find('h4', {"class": "list_title"}).text.strip())
location.append(item.find('p', {"class": "list_place"}).text.strip())
try:
price.append(item.find('p', {"class": "cost"}).text.strip())
except:
price.append('NA')
final_df = pd.DataFrame(
{'title': name,
'location': location,
'price': price
})
except Exception as e:
print(e)
print("continuing....")