【问题标题】:Adding objects for each item added from scraping data from a website为从网站抓取数据添加的每个项目添加对象
【发布时间】:2019-04-07 22:02:02
【问题描述】:

我正在尝试从网站检索数据并添加每一行数据和对象,我是 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)

我未能为从网站获得的每个元素添加一个对象,我显然做错了什么\或没有做,任何帮助将不胜感激!

【问题讨论】:

    标签: python object web-scraping beautifulsoup request


    【解决方案1】:

    您可以使用稍微不同的结构和语法,如下所示。

    我使用包含 CSS 类选择器来检索信息行,因为每个轨道的 id 不同

    div[class*="play-item gcol gid-electronic tid-"] 的 CSS 选择器组合 查找 class 属性值包含 play-item gcol gid-electronic tid- 的 div 元素。

    然后通过它们的类名选择感兴趣的各种,并为最终下载链接的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)
    

    【讨论】:

    • 太好了,我会试试看,这似乎是我应该做的逻辑,除了我不知道熊猫工具,非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2016-09-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多