這篇文章將為大家詳細講解有關怎么用Python獲取亞馬遜商品信息,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
亞馬遜網站相較于國內的購物網站,可以直接使用python的最基本的requests進行請求。訪問不是過于頻繁,在未觸發保護機制的情況下,可以獲取我們想要的數據。本次通過以下三部分簡單介紹下基本爬取流程:
使用requests的get請求,獲取亞馬遜列表和詳情頁的頁面內容使用css/xpath對獲取的內容進行解析,取得關鍵數據動態IP的作用及其使用方法
以游戲區為例:

獲取列表內能獲取到的商品信息,如商品名,詳情鏈接,進一步獲取其他內容。
用requests.get()獲取網頁內容,設置好header,利用xpath選擇器選取相關標簽的內容:
import requests
from parsel import Selector
from urllib.parse import urljoin
spiderurl = 'https://www.amazon.com/s?i=videogames-intl-ship'
headers = {
"authority": "www.amazon.com",
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",
}
resp = requests.get(spiderurl, headers=headers)
content = resp.content.decode('utf-8')
select = Selector(text=content)
nodes = select.xpath("//a[@title='product-detail']")
for node in nodes:
itemUrl = node.xpath("./@href").extract_first()
itemName = node.xpath("./div/h3/span/text()").extract_first()
if itemUrl and itemName:
itemUrl = urljoin(spiderurl,itemUrl)#用urljoin方法湊完整鏈接
print(itemUrl,itemName)此時已經獲取的當前列表頁目前能獲得的信息:

進入詳情頁:

進入詳情頁之后,能獲得更多的內容
用requests.get()獲取網頁內容,css選取相關標簽的內容:
res = requests.get(itemUrl, headers=headers)
content = res.content.decode('utf-8')
Select = Selector(text=content)
itemPic = Select.css('#main-image::attr(src)').extract_first()
itemPrice = Select.css('.a-offscreen::text').extract_first()
itemInfo = Select.css('#feature-bullets').extract_first()
data = {}
data['itemUrl'] = itemUrl
data['itemName'] = itemName
data['itemPic'] = itemPic
data['itemPrice'] = itemPrice
data['itemInfo'] = itemInfo
print(data)此時已經生成詳情頁數據的信息:

目前涉及到的就是最基本的requests請求亞馬遜并用css/xpath獲取相應的信息。
目前,國內訪問亞馬遜會很不穩定,我這邊大概率會出現連接不上的情況。如果真的需要去爬取亞馬遜的信息,最好使用一些穩定的代理,我這邊自己使用的是ipidea的代理,可以白嫖50M流量。如果有代理的話訪問的成功率會高,速度也會快一點。
代理使用有兩種方式,一是通過api獲取IP地址,還有用賬密的方式使用,方法如下:
3.1.1 api獲取代理


3.1.2 api獲取ip代碼
def getProxies():
# 獲取且僅獲取一個ip
api_url = '生成的api鏈接'
res = requests.get(api_url, timeout=5)
try:
if res.status_code == 200:
api_data = res.json()['data'][0]
proxies = {
'http': 'http://{}:{}'.format(api_data['ip'], api_data['port']),
'https': 'http://{}:{}'.format(api_data['ip'], api_data['port']),
}
print(proxies)
return proxies
else:
print('獲取失敗')
except:
print('獲取失敗')3.2.1 賬密獲取代理
因為是賬密驗證,所以需要 去到賬戶中心填寫信息創建子賬戶:


創建好子賬戶之后,根據賬號和密碼獲取鏈接:
3.2.2 賬密獲取代理代碼
# 獲取賬密ip
def getAccountIp():
# 測試完成后返回代理proxy
mainUrl = 'https://api.myip.la/en?json'
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",
}
entry = 'http://{}-zone-custom{}:proxy.ipidea.io:2334'.format("帳號", "密碼")
proxy = {
'http': entry,
'https': entry,
}
try:
res = requests.get(mainUrl, headers=headers, proxies=proxy, timeout=10)
if res.status_code == 200:
return proxy
except Exception as e:
print("訪問失敗", e)
pass使用代理之后,亞馬遜商品信息的獲取改善了不少,之前代碼會報各種連接失敗的錯誤,在requests請求之前調用代理獲取的方法,方法return回代理ip并加入requests請求參數,就可以實現代理請求了。
# coding=utf-8
import requests
from parsel import Selector
from urllib.parse import urljoin
def getProxies():
# 獲取且僅獲取一個ip
api_url = '生成的api鏈接'
res = requests.get(api_url, timeout=5)
try:
if res.status_code == 200:
api_data = res.json()['data'][0]
proxies = {
'http': 'http://{}:{}'.format(api_data['ip'], api_data['port']),
'https': 'http://{}:{}'.format(api_data['ip'], api_data['port']),
}
print(proxies)
return proxies
else:
print('獲取失敗')
except:
print('獲取失敗')
spiderurl = 'https://www.amazon.com/s?i=videogames-intl-ship'
headers = {
"authority": "www.amazon.com",
"user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.19 NetType/4G Language/zh_TW",
}
proxies = getProxies()
resp = requests.get(spiderurl, headers=headers, proxies=proxies)
content = resp.content.decode('utf-8')
select = Selector(text=content)
nodes = select.xpath("//a[@title='product-detail']")
for node in nodes:
itemUrl = node.xpath("./@href").extract_first()
itemName = node.xpath("./div/h3/span/text()").extract_first()
if itemUrl and itemName:
itemUrl = urljoin(spiderurl,itemUrl)
proxies = getProxies()
res = requests.get(itemUrl, headers=headers, proxies=proxies)
content = res.content.decode('utf-8')
Select = Selector(text=content)
itemPic = Select.css('#main-image::attr(src)').extract_first()
itemPrice = Select.css('.a-offscreen::text').extract_first()
itemInfo = Select.css('#feature-bullets').extract_first()
data = {}
data['itemUrl'] = itemUrl
data['itemName'] = itemName
data['itemPic'] = itemPic
data['itemPrice'] = itemPrice
data['itemInfo'] = itemInfo
print(data)通過上面的步驟,可以實現最基礎的亞馬遜的信息獲取。
目前只獲得最基本的數據,若想獲得更多也可以自行修改xpath/css選擇器去拿到你想要的內容。而且穩定的動態IP能是你進行請求的時候少一點等待的時間,無論是編寫中的測試還是小批量的爬取,都能提升工作的效率。以上就是全部的內容。
關于“怎么用Python獲取亞馬遜商品信息”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。