我仍在學習 python,并認為一個好的專案是制作 Instagram Scraper。首先,我想嘗試抓取 Kylie Jenners 的個人資料圖片,我以為我會使用 BS4 進行搜索,但后來我遇到了一個問題。
import requests
from bs4 import BeautifulSoup as bs
instagramUser = input('Input Instagram Username: ')
url = 'https://instagram.com/' instagramUser
r = requests.get(url)
soup = bs(r.text, 'html.parser')
profile_image = soup.find('img', class_ = "_6q-tv")['src']
print(profile_image)
在我宣告 profile_image 的行上,我收到一條錯誤訊息:
第 12 行,在 profile_image = soup.find('img', class_ = "_6q-tv")['src'] TypeError: 'NoneType' object is not subscriptable
我不確定為什么它不起作用,我的猜測是我在 Instagram 上錯誤地閱讀了 html 并且搜索不正確。我想問比我更有經驗的人我做錯了什么,任何幫助將不勝感激:)
uj5u.com熱心網友回復:
您可以將第 12 行的內容分解為兩個命令:
image_tag = soup.find('img', class_ = "_6q-tv")
profile_image = image_tag['src']
錯誤
第 12 行,在 profile_image = soup.find('img', class_ = "_6q-tv")['src'] TypeError: 'NoneType' object is not subscriptable
表示第一個命令的結果是None,也就是Python的null值,代表沒有值。該值不實作下標運算子 ( []),因此,它不可下標。
原因可能是soup.find沒有找到任何符合您的搜索條件并回傳的標簽None。
要除錯此問題,我建議您將源代碼寫入檔案并使用您選擇的文本編輯器(或直接在互動式 Python 控制臺中)檢查該檔案。這樣,您就可以看到您的 Python 程式“看到”了什么。如果您改用瀏覽器中的開發人員工具,您會在執行一堆 JavaScript 后看到網頁的狀態,但 BeautifulSoup 卻忽略了 JavaScript 代碼。它只是從服務器中按原樣獲取檔案。
正如 bushcat69 的回答所暗示的那樣,從 Instagram 上抓取內容可能很困難,因此您最好選擇一個更簡單的網站,該網站不使用那么多 JavaScript 和防止網路抓取的保護措施。
uj5u.com熱心網友回復:
Instagram 的內容是通過 javascript 加載的,因此像這樣抓取它是行不通的。它還有很多停止抓取的方法,因此如果不使用 Selenium 之類的瀏覽器自動化瀏覽器,您將很難抓取它。
您可以通過打開瀏覽器的開發人員工具 - 網路 - 獲取/XHR 并重新加載頁面來查看導航到頁面時發生的情況,在那里您可以看到所有其他已加載的內容,有時可以看到易于訪問的后端 api加載您想要的資料并且可以被抓取(遺憾的是,Instagram 不是這種情況,它受到嚴格保護)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410105.html
標籤:
上一篇:在CSS中的影像前添加徽標
