Rumah >pembangunan bahagian belakang >Tutorial Python >Dapatkan maklumat produk Amazon menggunakan Python

Dapatkan maklumat produk Amazon menggunakan Python

藏色散人
藏色散人asal
2022-10-08 16:49:513114semak imbas

Pengenalan

Berbanding dengan tapak web beli-belah domestik, tapak web Amazon boleh terus menggunakan permintaan paling asas Python untuk membuat permintaan. Akses tidak terlalu kerap, dan data yang kita inginkan boleh diperolehi tanpa mencetuskan mekanisme perlindungan. Kali ini, kami memperkenalkan secara ringkas proses rangkak asas melalui tiga bahagian berikut:

  • Gunakan permintaan permintaan untuk mendapatkan kandungan halaman penyenaraian Amazon dan halaman butiran

  • Gunakan css/xpath untuk menghuraikan kandungan yang diperoleh dan mendapatkan data utama

  • Peranan IP dinamik dan cara menggunakannya

1 Dapatkan maklumat halaman senarai Amazon

Ambil kawasan permainan sebagai contoh:

Dapatkan maklumat produk Amazon menggunakan Python

Dapatkan maklumat produk yang boleh diperolehi dalam senarai, Seperti nama produk, pautan butiran, dan akses lanjut kepada kandungan lain.

Gunakan requests.get() untuk mendapatkan kandungan halaman web, tetapkan pengepala dan gunakan pemilih xpath untuk memilih kandungan tag yang berkaitan:

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)

Halaman senarai semasa yang telah diperolehi pada masa ini boleh diperolehi Maklumat:

Dapatkan maklumat produk Amazon menggunakan Python

2. Dapatkan maklumat halaman butiran

Masukkan butiran halaman:

Dapatkan maklumat produk Amazon menggunakan Python

Selepas memasuki halaman butiran, anda boleh mendapatkan lebih banyak kandungan

Gunakan requests.get() untuk mendapatkan kandungan web dan gunakan css untuk pilih kandungan tag yang berkaitan:

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)

Pada masa ini Maklumat tentang data halaman butiran yang telah dihasilkan:

Dapatkan maklumat produk Amazon menggunakan Python

Apa yang terlibat pada masa ini ialah permintaan paling asas kepada Amazon dan menggunakan css/xpath untuk mendapatkan maklumat yang sepadan.

3. Tetapan proksi

Pada masa ini, akses domestik ke Amazon akan menjadi sangat tidak stabil, dan terdapat kebarangkalian yang tinggi bahawa saya tidak akan dapat menyambung. Jika anda benar-benar perlu merangkak maklumat Amazon, sebaiknya gunakan beberapa proksi yang stabil saya menggunakan proksi ipidea di sini, yang boleh mendapatkan 500 juta trafik secara percuma. Jika terdapat proksi, kadar kejayaan capaian akan lebih tinggi dan kelajuan akan lebih pantas.

URL ada di sini: http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP

Terdapat dua cara untuk digunakan proksi, Satu adalah untuk mendapatkan alamat IP melalui api, dan juga menggunakan kata laluan akaun Caranya adalah seperti berikut:

3.1.1 api untuk mendapatkan proksi

.

Dapatkan maklumat produk Amazon menggunakan Python

Dapatkan maklumat produk Amazon menggunakan Python

3.1.2 api dapatkan kod 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 Akaun ejen pemerolehan kata laluan (alamat pendaftaran: http://www.ipidea.net/?utm-source=PHP&utm-keyword=?PHP)

Kerana ia adalah akaun dan kata laluan pengesahan, anda perlu pergi ke pusat akaun untuk mengisi maklumat untuk membuat sub- Akaun: Dapatkan maklumat produk Amazon menggunakan Python

Dapatkan maklumat produk Amazon menggunakan Python

Selepas mencipta sub -akaun, dapatkan pautan berdasarkan nombor akaun dan kata laluan:

3.2.2 Kata laluan akaun Mendapatkan kod proksi

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

Selepas menggunakan proksi, pemerolehan maklumat produk Amazon telah telah banyak diperbaiki. Kod sebelumnya akan melaporkan pelbagai ralat kegagalan sambungan Kaedah pemerolehan proksi dipanggil sebelum permintaan permintaan, dan kaedah mengembalikan IP Proksi dan menambah parameter permintaan untuk melaksanakan permintaan proksi.

四、全部代码

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

Atas ialah kandungan terperinci Dapatkan maklumat produk Amazon menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn