У меня проблемы с API поиска eBay python sdk - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь работать над проектом, который собирает данные на интеллектуальных устройствах. Я решил использовать eBay python SDK, а не полагаться на очистку веб-страниц. У меня несколько проблем

  1. Когда я делаю запрос на конкретный товар, например "iPhone x 64 ГБ", я получаю ответ, который представляет собой список списков eBay. Среди списков некоторые элементы списка могут быть представлены в виде а.) Списка iPhone 6, что не то, что я хотел. b.) Список двух телефонов (например, версии iPhone x 64 ГБ и 256 ГБ). Как мне отфильтровать беспорядок?

  2. Документация для python SDK недостаточна, так как мне нужны дополнительные инструкции по фильтрации ответов XML, а также добавлению поисковых фильтров в мой API request.

  3. Мне нужно сделать несколько звонков для одного и того же элемента, но для другого номера страницы, который будет отправлен ответом (макс. 100 страниц с 100 элементами на странице). Я обычно вижу много списков одного и того же товара, одинаковые цены и их URL указывают на одного и того же продавца. Это, вероятно, не поможет мне провести точный статистический анализ таких показателей, как среднесуточная цена продажи "iPhone x". Как получить более качественные образцы данных из API, поскольку мне не выдадут все списки "iPhone X"?

Все проблемы возникают при использовании API поиска .

from ebaysdk.finding import Connection as find_connect
from statistics import mean, median
from bs4 import BeautifulSoup

APP_ID = 'Removed for privacy reasons'
# keywords = input("Enter search keywords(e.g 'white board'): ")

api = find_connect(appid=APP_ID, config_file=None,  siteid="EBAY-ENCA")
request = {
        'keywords': "Iphone x 64gb",
        'itemFilter': [
            {'name': 'Condition', 'value': 'Used'},
            {'name': 'currency', 'value': 'CAD'},
            {'name': 'minPrice', 'value': 100.0}
        ],
        'paginationInput': {
            'entriesPerPage': 100,
            'pageNumber': 1
        },
    }
response = api.execute('findItemsByKeywords', request)

# print(responses.dict())
soup = BeautifulSoup(response.content, 'lxml')
totalentries = int(soup.find('totalentries').text)
items = soup.find_all('item')

print(f"{totalentries} items found")

print_no = 0
prices = []
print(f"Current list is {len(items)} items long")
for item in items:
    cat = item.categoryname.string.lower()
    title = item.title.string.lower()
    price = int(round(float(item.currentprice.string)))
    url = item.viewitemurl.string.lower()

    print('-'*20)
    print(f"{cat}\n{title}\n{price}\n{url}\n")
    prices.append(price)
    print_no += 1

print(f"{print_no} items have been printed")
print(f"Average price is ${mean(prices)}. Median is ${median(prices)}")

Я могу получить вывод, например

3242 items found
Current list is 100 items long

--------------------
# The problem about two different phones in one listing that I was talking about
cell phones & smartphones
apple iphone x silver & gray gsm unlocked 64gb or 256gb
600
https://www.ebay.ca/itm/apple-iphone-x-silver-gray-gsm-unlocked-64gb-256gb-/273580927268?var=572990606496

--------------------
# Basically a duplicate of the above listing
cell phones & smartphones
apple iphone x silver & gray gsm unlocked 64gb or 256gb
600
https://www.ebay.ca/itm/apple-iphone-x-silver-gray-gsm-unlocked-64gb-256gb-/273580927268?var=572990606496

--------------------
# I did not search for an iPhone 8
mobile phones
apple iphone 8 - 64gb - silver (unlocked) model a1863 
152
https://www.ebay.ca/itm/apple-iphone-8-64gb-silver-unlocked-model-a1863-/174235235608

--------------------
# This is what I wanted
cell phones & smartphones
apple iphone x 64gb silver unlocked 5.8 in ios smartphone-visible shadow/burn-in
460
https://www.ebay.ca/itm/apple-iphone-x-64gb-silver-unlocked-5-8-ios-smartphone-visible-shadow-burn-in-/174212340572?var=473126790373

--------------------
# X not Xs max
mobile phones
apple iphone xs max [64gb / 256gb /512gb] cheap unlocked [au stock] free express
1019
https://www.ebay.ca/itm/apple-iphone-xs-max-64gb-256gb-512gb-cheap-unlocked-au-stock-free-express-/324024310348?var=513068412663

100 items have been printed # removed most listings from output for brevity
Average price is $566.2. Median is $600

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Вы можете запросить по аспекту вместо ключевого слова. Это должно вернуть больше ожидаемых результатов.

api_request = {
    'keywords': "Iphone x",
    'itemFilter': [
        {'name': 'Condition', 'value': 'Used'},
        {'name': 'currency', 'value': 'CAD'},
        {'name': 'minPrice', 'value': 100.0}
    ],
    'aspectFilter': [
        {
            'aspectName': 'Storage Capacity',
            'aspectValueName': '16 GB',
        }
    ],
    'categoryId': 9355,
    'outputSelector': [
        'AspectHistogram',
    ],
    'paginationInput': {
        'entriesPerPage': 100,
        'pageNumber': 1
    },
    'sortOrder': 'BestMatch'
}
0 голосов
/ 30 марта 2020

На самом деле, я несколько месяцев закончил очень похожий проект за go (для мобильной компании, а также статистический анализ цен). Вот мой короткий и простой в реализации репозиторий: https://github.com/Brat-Pit/eBay

Мой общий подход: получить список идентификаторов элементов, используя findItemsAdvanced (), затем используйте GetMultipleItems () для получения дополнительных данных.

Но вернемся к Вашим вопросам:

Ad.1 Если вы хотите каким-либо образом фильтруйте элементы, сначала получите список идентификаторов элементов (например, с помощью фильтров цена / описание в findItemsAdvanced () ). Затем используйте ebaysdk.shopping и метод GetMultipleItems () . Вы получите доступ к атрибутам элемента (например, оперативная память, размер экрана и т. Д. c.)

Ad.2 Это правда. Около 80% информации, которую я получил с форумов, 20% - через документацию.

Ad.3 Я понимаю Вашу точку зрения. Дневной лимит составляет 5000 запросов. Мое решение состояло в том, чтобы сначала упорядочить данные по релевантности, используя findItemsAdvanced () (сортируйте возвращаемые элементы в соответствии с одним указанным порядком сортировки. По умолчанию: BestMatch. Поэтому вам не нужно ничего делать, как сортировку), и затем загружайте только самые «популярные» аукционы (пользователи выбирают / покупают их не без причины, и это основная идея за кулисами).

Надеюсь, это поможет.

...