Maison  >  Article  >  développement back-end  >  Obtenez des informations sur les produits Amazon à l'aide de Python

Obtenez des informations sur les produits Amazon à l'aide de Python

藏色散人
藏色散人original
2022-10-08 16:49:513051parcourir

Introduction

Par rapport aux sites Web d'achats nationaux, le site Web d'Amazon peut utiliser directement les requêtes les plus élémentaires de python pour effectuer des requêtes. L'accès n'est pas trop fréquent et les données souhaitées peuvent être obtenues sans déclencher le mécanisme de protection. Cette fois, nous présenterons brièvement le processus d'exploration de base à travers les trois parties suivantes :

  • Utilisez la requête get des requêtes pour obtenir le contenu de la page de liste et de détails Amazon

  • Utilisez css/xpath pour analyser le contenu obtenu et obtenir les données clés

  • Le rôle de l'IP dynamique et comment l'utiliser

1. Obtenez les informations de la page de liste Amazon

Prenez la zone de jeu comme exemple :

Obtenez des informations sur les produits Amazon à laide de Python

Obtenez les informations sur le produit qui peuvent être obtenues dans la liste, telles que le nom du produit, le lien de détails et un accès supplémentaire à d'autres contenus.

Utilisez request.get() pour obtenir le contenu Web, définissez l'en-tête et utilisez le sélecteur XPath pour sélectionner le contenu des balises pertinentes :

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)

Les informations actuellement disponibles sur la page de liste actuelle qui ont été obtenues à ce stade. heure :

Obtenez des informations sur les produits Amazon à laide de Python

II , Obtenez des informations sur la page de détails

Entrez dans la page de détails :

Obtenez des informations sur les produits Amazon à laide de Python

Après avoir accédé à la page de détails, vous pouvez obtenir plus de contenu

Utilisez request.get() pour accéder au Web contenu et utilisez CSS pour sélectionner le contenu des balises pertinentes :

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)

À l'heure actuelle, les informations des données de la page de détails ont été générées :

Obtenez des informations sur les produits Amazon à laide de Python

Ce qui est actuellement impliqué, ce sont les requêtes les plus élémentaires pour demander à Amazon et utilisez css/xpath pour obtenir les informations correspondantes.

3. Paramètres proxy

Actuellement, l'accès national à Amazon sera très instable et il y a une forte probabilité que je ne puisse pas me connecter. Si vous avez vraiment besoin d'explorer les informations d'Amazon, il est préférable d'utiliser des proxys stables. J'utilise ici le proxy d'ipidea, qui peut obtenir 500 millions de trafic gratuitement. S'il existe un proxy, le taux de réussite d'accès sera plus élevé et la vitesse sera plus rapide.

Le site Web est ici : http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP

Il existe deux façons d'utiliser le proxy, l'une consiste à obtenir l'adresse IP via le api, et l'autre consiste à utiliser le mot de passe du compte. Utilisez la méthode suivante :

3.1.1 api pour obtenir l'agent

Obtenez des informations sur les produits Amazon à laide de Python

Obtenez des informations sur les produits Amazon à laide de Python

3.1.2 api pour obtenir le code 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 Mot de passe du compte pour obtenir l'agent (adresse d'inscription : http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP)

Parce qu'il s'agit d'une vérification de compte et de mot de passe, vous devez vous rendre au centre de compte pour renseigner les informations permettant de créer un sous-compte :Obtenez des informations sur les produits Amazon à laide de Python

Obtenez des informations sur les produits Amazon à laide de Python

Après avoir créé le sous-compte, obtenez le lien en fonction du numéro de compte et du mot de passe :

3.2. 2 Obtenez le code de l'agent pour le mot de passe du compte

# 获取账密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

Après avoir utilisé l'agent, l'acquisition des informations sur les produits Amazon a été considérablement améliorée. Le code précédent signalerait divers échecs de connexion, appelez la méthode d'acquisition du proxy avant la demande de requête. La méthode renvoie l'adresse IP du proxy et ajoute les paramètres de requête pour implémenter la requête proxy.

四、全部代码

# 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能是你进行请求的时候少一点等待的时间,无论是编写中的测试还是小批量的爬取,都能提升工作的效率。以上就是全部的内容。 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn