Добавление объектов для каждого элемента, добавленного из данных с веб-сайта. - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь получить данные с веб-сайта и добавить для каждой строки данных и объекта, я новичок в 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)

Мне не удалось добавить объект для каждого элемента, который я получаю с веб-сайта, я явно что-то делаю неправильно или не делаю, и любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете использовать немного другой struture и синтаксис, такой как ниже.

Я использую селектор класса CSS для получения строк информации, так как идентификатор отличается для каждой дорожки

enter image description here

Селекторная комбинация 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...