python - 为从网站抓取数据添加的每个项目添加对象
问题描述
我正在尝试从网站检索数据并添加每一行数据和对象,我是 python 新手,我显然错过了一些东西,因为我只能得到 1 个对象,我想要得到的是我得到排序的所有对象按键值对:
import urllib.request
import bs4 as bs
url = 'http://freemusicarchive.org/search/?quicksearch=drake/'
search = ''
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urllib.request.urlopen(req).read()
soup = bs.BeautifulSoup(html, 'html.parser')
tracks_info = [{}]
spans = soup.find_all('span', {'class': 'ptxt-artist'})
for span in spans:
arts = span.find_all('a')
for art in arts:
print(art.text)
spans = soup.find_all('span', {'class': 'ptxt-track'})
for span in spans:
tracks = span.find_all('a')
for track in tracks:
print(track.text)
for download_links in soup.find_all('a', {'title': 'Download'}):
print(download_links.get('href'))
for info in tracks_info:
info.update({'artist': art.text})
info.update({'track': track.text})
info.update({'link': download_links.get('href')})
print(info)
我没有为我从网站上获得的每个元素添加一个对象,我显然做错了什么\或没有做,任何帮助将不胜感激!
解决方案
您可以使用稍微不同的结构和语法,如下所示。
我使用包含 CSS 类选择器来检索信息行,因为每个轨道的 id 都不同
CSS 选择器组合div[class*="play-item gcol gid-electronic tid-"]
查找 div 元素,其 class 属性的值包含play-item gcol gid-electronic tid-
.
然后通过它们的类名选择感兴趣的各个列a
,并为最终下载链接的标记元素使用后代 css 选择器。
import urllib.request
import bs4 as bs
import pandas as pd
url = 'http://freemusicarchive.org/search/?quicksearch=drake/'
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
html = urllib.request.urlopen(req).read()
soup = bs.BeautifulSoup(html, 'html.parser')
tracks_Info = []
headRow = ['Artist','TrackName','DownloadLink']
for item in soup.select('div[class*="play-item gcol gid-electronic tid-"]'):
tracks_Info.append([item.select_one(".ptxt-artist").text.strip(), item.select_one(".ptxt-track").text, item.select_one(".playicn a").get('href')])
df = pd.DataFrame(tracks_Info,columns=headRow)
print(df)
推荐阅读
- delphi - 为什么使用填充模式时轮廓系列要慢得多
- python - 如何让这个 RL 代码获得 GPU 支持?
- macos - 无法使用我的 MacBook 连接到 EC2 服务器
- java - 为什么我的 android-studio 的默认布局设置为线性布局?
- html - 如何防止滚动整个页面?
- php - 警告:MPDF 库不存在
- nativescript - Nativescript observableArray with observable.fromObject - 自动更新视图
- grafana - prometheus:是否可以使用仪表的事件编号作为计数器?
- typescript - rxjs 管道和订阅(在主题上)在两个单独的步骤中没有按预期工作
- jquery - 将特定表数据排序为日期,但在 DataTables 中作为文本进行排序