首页 > 解决方案 > BeautifulSoup Python为具有属性的特定标签提取标签标题

问题描述

我正在使用beautifulsoup 为songkick 上的某些艺术家提取音乐会信息。我正在使用的网址在这里https://www.songkick.com/metro-areas/17835-us-los-angeles-la/february-2020?page=1。我已经能够提取所有艺术家、场地、城市和州信息,我唯一遇到的问题是提取音乐会的日期。

在查看 html 元素时,我看到节目的日期被列为 li title="Saturday 01 February 2020" 值,例如 ul class="event-listings" 下的孩子。我试图执行的一种方法是提取 li 标题下的时间日期时间值,但我的输出包括每个 li 时间日期时间的整个 html 标记,而不仅仅是日期时间。我正在寻找提取 li 标题或时间日期时间值。这些 li 也没有课程。

这是我的一些代码

import requests
from bs4 import BeautifulSoup as bs4

pages=[]
artists=[]
venues=[]
dates=[]
cities=[]
states=[]

pages_to_scrape=1

for i in range(1, pages_to_scrape+1):
    url = 'https://www.songkick.com/metro-areas/17835-us-los-angeles-la/february-2020?page={}'.format(i)
    pages.append(url)
for item in pages:
    page = requests.get(item)
    soup = bs4(page.text, 'html.parser')
    for m in soup.findAll('li', title=True):
        date = m.find('time')
        print(date)

输出:

<time datetime="2020-02-01T20:00:00-0800"></time>
<time datetime="2020-02-01T20:00:00-0800"></time>
<time datetime="2020-02-01T19:00:00-0800"></time>
<time datetime="2020-02-01T19:00:00-0800"></time>
<time datetime="2020-02-01T21:00:00-0800"></time>
etc...

寻找这样的输出:

2020-02-01
2020-02-01
2020-02-01
etc...

或者,如果能够获取 li 的标题值,则输出如下:

Saturday 01 February 2020
Saturday 01 February 2020
Saturday 01 February 2020
Saturday 01 February 2020
etc...

我很好奇我是否能够在时间日期时间的 " 处拆分,但由于它不是文本,我认为这是不可能的。另外,我不想抓住第一个 li class = "with-date “因为这只是页面日期的标题,我不只是抓住所有 li 的。

标签: pythonhtmldatetimebeautifulsoupattributes

解决方案


尝试m.find('time')['datetime']代替m.find('time')


推荐阅读