Веб-очистка данных заказа Али Экспресс

Я пытаюсь почистить некоторые данные с сайта AliExpress, и я понятия не имею, как поступить. Начал делать это вручную, но это, скорее всего, займет у меня несколько часов:/ Я бы хотел извлечь следующие наборы данных:

(i) Заказы на страну

Для данного продукта я хочу получить ~1000 последних заказов со страной назначения в Excel. Например, возьмите следующий продукт: https://www.aliexpress.com/item/Bluedio-T4S-Active-Noise-Cancelling-Wireless-Bluetooth-Headphones-wireless-Headset-with-Mic/32821244791.html?spm=2114.search0103.3.1.3b0615cfrdkG5X&ws_ab_test=searchweb0_0,searchweb201602_1_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10304_10307_10306_10302_5711211_10313_10059_10534_100031_10103_10627_10626_10624_10623_10622_5722411_10621_10620_5711311,searchweb201603_25,ppcSwitch_5&algo_expid=ce68d26f-337b-49ac-af00-48c5b4c4c5c4-0&algo_pvid=ce68d26f-337b-49ac-af00-48c5b4c4c5c4&transAbTest=ae803_3&priceBeautifyAB=0

Картинка: история транзакций

Здесь моя цель состоит в том, чтобы получить Excel с колонками: Дата (или некоторый другой уникальный идентификатор) - страна покупателя - количество штук. Так что для первого покупателя на картинке это будет что-то вроде "10 марта 2018 00:11" - "RU" - "1 шт.". И это примерно для 100-120 таких страниц (всего около 1000 клиентов) в файле CSV.

Может ли кто-нибудь помочь мне с тем, как кодировать это, например, в Python? Или какие-нибудь идеи по поводу инструментов, которые я могу использовать?

(ii) Общее количество заказов в подкатегории

Для данной (под) категории, например, "Красота и здоровье - Здравоохранение" ( https://www.aliexpress.com/category/200002496/health-care.html?spm=2114.search0103.3.19.696619daL05kcB&site=glo&g=y) Я хотел бы суммировать все заказы по 100 страницам продуктов. На картинке заказы обведены желтым.

Картина: Продукты с количеством заказов

Таким образом, результатом может быть просто общее количество заказов в этой категории. (Это будет сумма более 100 страниц по 48 товаров на страницу)

Это то, что было бы возможно в Python? У меня есть некоторый базовый опыт работы с Python, но этого недостаточно, чтобы на самом деле построить что-то подобное.

Буду очень признателен, если кто-нибудь поможет мне начать!

Заранее большое спасибо!

Брюс

ОБНОВЛЕНИЕ: мне удалось сделать (я) благодаря бреду салата. Для (ii) я создал приведенный ниже код, который отлично работает для ~5 страниц, но после этого начинает пропускать продукты / переходить по ним. Это из-за кода? Или это может быть потому, что, возможно, они ограничивают получение слишком большого количества данных с сервера?

import bs4
import csv
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

filename="Dresses.csv"
f=open(filename,"w")
headers="product_ID, orders\n"
f.write(headers)

for p in range(1,100):

my_url='https://www.aliexpress.com/category/200003482/dresses/' + str(p) 
+'.html?site=glo&g=y&SortType=total_tranpro_desc&needQuery=n&tag='
#had to split the above link because it did not fit on one line

uClient=uReq(my_url)
page_html=uClient.read()
uClient.close()
page_soup=soup(page_html,"html.parser")
containers=page_soup.findAll("div",{"class":"item"})


for container in containers:
    em_order = container.em
    order_num = em_order.text
    product_ID = container.input["value"]
    f.write(product_ID + "," + order_num + "\n")

f.close()

1 ответ

Частичный ответ, так как у меня нет времени смотреть на часть 2 прямо сейчас, но вот решение для части 1, которое я написал, используя Python 3.6.4, Я постараюсь позже обновить с частью 2.

import csv

import requests


def _get_transactions(*, product_id, page_num):
    headers = {
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'
    }
    params = {
        'productId': product_id,
        'type': 'default',
        'page': page_num
    }
    url = 'https://feedback.aliexpress.com/display/evaluationProductDetailAjaxService.htm'
    r = requests.get(url, headers=headers, params=params)
    r.raise_for_status()
    return r.json()


def get_product_transactions(*, product_id, transaction_pages=1):
    transactions = []
    for page_num in range(1, transaction_pages + 1):
        current_transactions = _get_transactions(
            product_id=product_id,
            page_num=page_num
        )
        transactions.extend(current_transactions['records'])
    return transactions


if __name__ == '__main__':
    product_id = '32821244791'
    transactions = get_product_transactions(
        product_id=product_id,
        transaction_pages=3
    )

    with open('{}_transactions.csv'.format(product_id), 'w') as f:
        writer = csv.DictWriter(f, fieldnames=('date', 'country', 'pieces'))
        writer.writeheader()
        for transaction in transactions:
            writer.writerow({
                'date': transaction['date'],
                'country': transaction['countryCode'],
                'pieces': transaction['quantity']
            })

Выходной файл '32821244791_transactions.csv'

date,country,pieces
12 Mar 2018 14:42,hu,1
12 Mar 2018 14:16,be,1
12 Mar 2018 13:47,kr,1
12 Mar 2018 13:25,br,1
12 Mar 2018 13:13,ru,3
12 Mar 2018 12:41,fr,1
12 Mar 2018 11:42,es,1
12 Mar 2018 11:15,ru,1
12 Mar 2018 11:05,ru,1
12 Mar 2018 10:45,ro,1
12 Mar 2018 10:44,ru,1
12 Mar 2018 10:00,kz,1
12 Mar 2018 10:00,in,1
12 Mar 2018 09:51,fr,1
12 Mar 2018 09:39,nl,1
12 Mar 2018 09:26,fr,1
12 Mar 2018 09:24,ru,1
12 Mar 2018 09:19,cz,1
12 Mar 2018 09:00,ru,1
12 Mar 2018 08:46,ru,1
12 Mar 2018 08:33,no,1
12 Mar 2018 08:32,pl,1
12 Mar 2018 08:21,br,1
12 Mar 2018 08:20,ru,1
Другие вопросы по тегам