我一直在嘗試用美麗的湯練習網路抓取。但是每次我改變一個網站時,標簽結構是如此不同,這真的讓我感到困惑。這次我試圖廢棄亞馬遜暢銷網站(
我的想法是找到每個專案的“主要”標簽,并挖掘包含我想要的資訊的標簽。所以我使用 .select() 并從“li class”開始。但是當我嘗試在“span.a-list-item”之后添加標簽時,我會得到以下代碼的空結果,
container = page.select('li.zg-item-immersion > span.a-list-item > div.a-section a-spacing-none aok-relative' )
我可以將標簽限制放入 .select() 還是我做錯了什么?
所以我停在“span.a-list-item”并嘗試了以下方法,但我不明白為什么我的代碼有時會給我空結果,有時會回傳我想要的東西......我想這是相關的到網站的連接?
from bs4 import BeautifulSoup
import requests
url = "https://www.amazon.com/Best-Sellers-Appstore-
Android/zgbs/mobile-apps/ref=zg_bs_unv_mas_1_9408444011_1"
page = BeautifulSoup(requests.get(url).content,'lxml')
containers = page.select('li.zg-item-immersion > span.a-list-item')
ranking = (containers[1].find("span",class_="zg-badge-text").text)[1:]
在最后一行,我能夠使用該行代碼成功獲得排名編號,但是當我嘗試將它們附加到帶有回圈的串列中時,
for item in range(50):
ranking.append((containers[item].find("span",class_="zg-badge-text").text)[1:])
我不斷收到“串列索引超出范圍”錯誤,我不明白為什么它超出范圍,因為單個頁面上有 50 個專案。
最后但并非最不重要的一點是,我可以就學習如何瀏覽不同的網站獲得一些建議嗎?我還閱讀了 beautifulsoup 檔案,并按照使用不同函式獲取特定標簽的說明進行操作,但仍然沒有得到我想要的...
uj5u.com熱心網友回復:
實際上,在 for 回圈之后,它并沒有從一系列串列中以文本形式獲取資料。您還需要將用戶代理作為標頭注入。
代碼:
from bs4 import BeautifulSoup
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'}
url = "https://www.amazon.com/Best-Sellers-Appstore- Android/zgbs/mobile-apps/ref=zg_bs_unv_mas_1_9408444011_1"
r =requests.get(url, headers = headers)
page = BeautifulSoup(r.content,'lxml')
containers = page.select('li.zg-item-immersion > span.a-list-item')
for container in containers:
ranking = container.find("span",class_="zg-badge-text").text
print(ranking)
輸出:
#1
#2
#3
#4
#5
#6
#7
#8
#9
#10
#11
#12
#13
#14
#15
#16
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26
#27
#28
#29
#30
#31
#32
#33
#34
#35
#36
#37
#38
#39
#40
#41
#42
#43
#44
#45
#46
#47
#48
#49
#50
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321004.html
