我正在開發一個網路抓取工具來從 AllMusic 收集一些資訊。但是,當標簽內有多個選項(例如 href)時,我很難正確回傳資訊。
問題:我需要回傳每個藝術家的第一個音樂流派。在每個藝術家一個值的情況下,我的代碼有效。但是,在有多個音樂流派的情況下,我不能只選擇第一個。這是創建的代碼:
import requests
import re
import pandas as pd
from bs4 import BeautifulSoup
import urllib.request
artists =['Alexander 23', 'Alex & Sierra', 'Tion Wayne', 'Tom Cochrane','The Waked']
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
performer = []
links = []
genre = []
for artist in artists:
url= urllib.request.urlopen("https://www.allmusic.com/search/artist/" urllib.parse.quote(artist))
soup = BeautifulSoup(requests.get(url.geturl(), headers=headers).content, "html.parser")
div = soup.select("div.name")[0]
link = div.find_all('a')[0]['href']
links.append(link)
for l in links:
soup = BeautifulSoup(requests.get(l, headers=headers).content, "html.parser")
divGenre= soup.select("div.genre")[0]
genres = divGenre.find('a')
performer.append(artist)
genre.append(genres.text)
df = pd.DataFrame(zip(performer, genre, links), columns=["artist", "genre", "link"])
df
uj5u.com熱心網友回復:
正確地理解你的問題 - 主要問題是你links在你的內部迭代for-loop并導致重復。
可能會改變您的策略,嘗試在一次迭代中獲取所有資訊并以更結構化的方式存盤它們。
例子
import requests
import pandas as pd
from bs4 import BeautifulSoup
import urllib.request
artists =['Alexander 23', 'Alex & Sierra', 'Tion Wayne', 'Tom Cochrane','The Waked']
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
data = []
for artist in artists:
url= urllib.request.urlopen("https://www.allmusic.com/search/artist/" urllib.parse.quote(artist))
soup = BeautifulSoup(requests.get(url.geturl(), headers=headers).content, "html.parser")
link = soup.select_one("div.name a").get('href')
soup = BeautifulSoup(requests.get(link, headers=headers).content, "html.parser")
data.append({
'artist':artist,
'genre':soup.select_one("div.genre a").text,
'link':link
})
print(pd.DataFrame(data).to_markdown(index=False))
輸出
| 藝術家 | 型別 | 關聯 |
|---|---|---|
| 亞歷山大 23 | 流行搖滾 | https://www.allmusic.com/artist/alexander-23-mn0003823464 |
| 亞歷克斯和塞拉 | 民間 | https://www.allmusic.com/artist/alex-sierra-mn0003280540 |
| 蒂恩·韋恩 | 說唱 | https://www.allmusic.com/artist/tion-wayne-mn0003666177 |
| 湯姆·科克倫 | 流行搖滾 | https://www.allmusic.com/artist/tom-cochrane-mn0000931015 |
| 被喚醒的 | 電子的 | https://www.allmusic.com/artist/the-waked-mn0004025091 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456919.html
上一篇:無法使用Request和BeautifulSoup獲取lxml站點的資訊
下一篇:從表中抓取資料不會產生任何結果
