Веб-очистка данных заказа Али Экспресс
Я пытаюсь почистить некоторые данные с сайта 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