Heim  >  Artikel  >  Backend-Entwicklung  >  Erhalten Sie Amazon-Produktinformationen mit Python

Erhalten Sie Amazon-Produktinformationen mit Python

藏色散人
藏色散人Original
2022-10-08 16:49:512991Durchsuche

Einführung

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.
  • Verwenden Sie request.get(), um den Webinhalt abzurufen, legen Sie den Header fest und verwenden Sie den XPath-Selektor, um den Inhalt der relevanten Tags auszuwählen:

    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)

    Die derzeit auf der aktuellen Listenseite verfügbaren Informationen, die hier abgerufen wurden Zeit:

II , Informationen zur Detailseite abrufen

Geben Sie die Detailseite ein: Erhalten Sie Amazon-Produktinformationen mit Python

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: Erhalten Sie Amazon-Produktinformationen mit Python

Was derzeit betroffen ist, sind die grundlegendsten Anfragen zum Anfordern von Amazon und Verwenden Sie CSS/XPath, um die entsprechenden Informationen zu erhalten.

3. Proxy-Einstellungen

Erhalten Sie Amazon-Produktinformationen mit Python

Derzeit ist der inländische Zugriff auf Amazon sehr instabil und es besteht eine hohe Wahrscheinlichkeit, dass ich keine Verbindung herstellen kann. Wenn Sie die Informationen von Amazon wirklich crawlen müssen, verwenden Sie am besten einige stabile Proxys. Ich verwende hier den Proxy von ipidea, der 500 Millionen Datenverkehr kostenlos erhalten kann. Wenn ein Proxy vorhanden ist, ist die Erfolgsquote beim Zugriff höher und die Geschwindigkeit höher.

Die Website ist hier:

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:

Erhalten Sie Amazon-Produktinformationen mit Python

3.1.1 API, um den Agenten zu erhalten

3.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('获取失败')

3.2.1 Kontopasswort zum Erhalten des Agenten (Registrierungsadresse:

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:Erhalten Sie Amazon-Produktinformationen mit Python

Erhalten Sie Amazon-Produktinformationen mit Python

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn