python - 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 的。
解决方案
尝试m.find('time')['datetime']
代替m.find('time')
推荐阅读
- python-3.x - 当函数通过在单独的线程中按下控制台键自行运行时中断
- wordpress - 将相同的样式应用于 Oxygen Builder 中的可编辑块
- python - ValueError:数据基数不明确:x 大小:10 y 大小:1 请提供具有相同第一维的数据
- python - InvalidArgumentError:断言失败:[标签必须是 <= n_classes - 1] [条件 x <= y 没有按元素保持:] [x (head/losses/Cast:0) = ]
- swift - 如何等到 UIView 转换结束
- c++ - C++ 中“低级”容器数据的原始指针、智能指针或 std::vector
- html - 如何制作一个包含给定单元格数量的动态 HTML 表格?
- javascript - 无法对您进行身份验证 - twitter api v1.1
- cordova - admob 实时广告未在 ios 上显示,但在 android 上显示(产品)
- c++ - unordered_multimap.empty() 返回真,即使我认为它应该返回假?