Im Vergleich zu inländischen Shopping-Websites kann die Amazon-Website direkt die grundlegendsten Anfragen von Python verwenden, um Anfragen zu stellen. Der Zugriff ist nicht zu häufig und die gewünschten Daten können abgerufen werden, ohne den Schutzmechanismus auszulösen. Dieses Mal werden wir den grundlegenden Crawling-Prozess in den folgenden drei Teilen kurz vorstellen:
Verwenden Sie die Get-Anfrage von Anfragen, um den Seiteninhalt der Amazon-Liste und der Detailseite abzurufen.
Verwenden Sie CSS/XPath, um die zu analysieren Erhalten Sie Inhalte und erhalten Sie die Schlüsseldaten
Rufen Sie die Produktinformationen ab, die in der Liste abgerufen werden können, z. B. Produktname, Detaillink und weiteren Zugriff auf andere Inhalte.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/h2/span/text()").extract_first() if itemUrl and itemName: itemUrl = urljoin(spiderurl,itemUrl)#用urljoin方法凑完整链接 print(itemUrl,itemName)
Geben Sie die Detailseite ein:
Nachdem Sie die Detailseite aufgerufen haben, können Sie weitere Inhalte abrufen
Verwenden Sie request.get(), um das Web abzurufen Inhalt und verwenden Sie CSS, um den Inhalt der relevanten Tags auszuwählen:
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)
Zu diesem Zeitpunkt wurden die Informationen der Detailseitendaten generiert:
http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP
Es gibt zwei Möglichkeiten, den Proxy zu verwenden, eine besteht darin, die IP-Adresse über den zu erhalten API und die andere besteht darin, das Kontokennwort zu verwenden. Verwenden Sie die folgende Methode: 3.1.1 API, um den Agenten zu erhalten3.1.2 API, um den IP-Code zu erhalten
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('获取失败')
http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP)
Da es sich um eine Konto- und Passwortüberprüfung handelt, Sie müssen zum Kontocenter gehen, um die Informationen zum Erstellen eines Unterkontos einzugeben:
Nachdem Sie das Unterkonto erstellt haben, erhalten Sie den Link basierend auf der Kontonummer und dem Passwort:
3.2. 2 Erhalten Sie den Agentencode für das Kontopasswort rrreeNach der Verwendung des Agenten wurde die Erfassung von Amazon-Produktinformationen erheblich verbessert. Der vorherige Code meldete verschiedene Verbindungsfehler. Rufen Sie die Proxy-Erfassungsmethode vor der Anforderung auf. Die Methode gibt die Proxy-IP zurück und fügt die Anforderungsparameter der Anforderung hinzu, um die Proxy-Anforderung zu implementieren. 四、全部代码
# 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/h2/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能是你进行请求的时候少一点等待的时间,无论是编写中的测试还是小批量的爬取,都能提升工作的效率。以上就是全部的内容。
Das obige ist der detaillierte Inhalt vonErhalten Sie Amazon-Produktinformationen mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!