网站抓取活动名称,位置,价格

时间:2020-03-08 03:38:33

标签: python pandas web-scraping beautifulsoup

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上删除了数据,但是他的网站却乏味。

1 个答案:

答案 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....")