我想做一個亞馬遜的網路爬蟲。
但是,看起來 everydata 是 None 型別。
我在谷歌上發現,有很多人制作了亞馬遜的網路爬蟲。
請給我一些建議來解決這個 Nonetype 問題。
這是我的代碼:
import requests
from bs4 import BeautifulSoup
amazon_dir = requests.get("https://www.amazon.es/s?k=docking station&__mk_es_ES=ÅMÅŽÕÑ&crid=34FO3BVVCJS4V&sprefix=docking,aps,302&ref=nb_sb_ss_ts-doa-p_1_7")
amazon_soup = BeautifulSoup(amazon_dir.text, "html.parser")
product_table = amazon_soup.find("div", {"class": "sg-col-inner"})
print(product_table)
products = product_table.find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print(name, rating, price)
謝謝
uj5u.com熱心網友回復:
門戶可能會檢查標題User-Agent以針對不同的瀏覽器或設備發送不同的 HTML,有時這會導致在頁面上查找元素時出現問題。
但通常門戶網站會檢查此標題以阻止腳本/機器人。
例如requests發送User-Agent: python-requests/2.26.0。
如果我使用User-Agent來自真實瀏覽器或至少較短版本的標頭,Mozilla/5.0則代碼有效。
還有其他問題。
幾乎有 70 個元素<div ...>,表格是第三個元素,但find()只給出了第一個元素。您必須使用find_all()并稍后使用[2]才能獲得第 3 個元素。
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking station&__mk_es_ES=ÅMÅŽÕÑ&crid=34FO3BVVCJS4V&sprefix=docking,aps,302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
print(response.text[:1000])
print('---')
amazon_soup = BeautifulSoup(response.text, "html.parser")
all_divs = amazon_soup.find_all("div", {"class": "sg-col-inner"})
print('len(all_divs):', len(all_divs))
print('---')
products = all_divs[3].find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print('name:', name.text)
print('rating:', rating.text)
print('price:', price.text)
編輯:
顯示所有產品的版本:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking station&__mk_es_ES=ÅMÅŽÕÑ&crid=34FO3BVVCJS4V&sprefix=docking,aps,302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
#print(response.text[:1000])
#print('---')
soup = BeautifulSoup(response.text, "html.parser")
results = soup.find("div", {"class": "s-main-slot s-result-list s-search-results sg-row"})
all_products = results.find_all("div", {"class": "sg-col-inner"})
print('len(all_products):', len(all_products))
print('---')
for item in all_products:
name = item.find("span", {"class": "a-size-base-plus"})
rating = item.find("span", {"class": "a-icon-alt"})
price = item.find("span", {"class": "a-price-whole"})
if name:
print('name:', name.text)
if rating:
print('rating:', rating.text)
if price:
print('price:', price.text)
if name or rating or price:
print('---')
順便提一句:
門戶網站不時重繪 服務器上的代碼和 HTML - 因此,如果您找到教程,請檢查它的年代。較舊的教程可能不起作用,因為門戶可能會更改代碼中的某些內容。
許多現代的網頁開始使用JavaScript來添加元素,但requests并BeautifulSoup不能運行JavaScript。而這可能需要使用Selenium來控制真正的 web 瀏覽器才能運行JavaScript。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/382736.html
