Очистка данных API с помощью Selenium

#api #selenium #screen-scraping

#API #селен #очистка экрана

Вопрос:

Я новичок в очистке, и у меня вопрос, могу ли я технически делать то, что я хотел бы сделать.

Я хотел бы очистить веб-сайт, но я вижу, что в API за веб-сайтом есть больше информации, чем на самом веб-сайте. Поскольку я вижу данные API в моем веб-браузере, есть ли способ очистить эти данные, например, очистить интерфейс с помощью selenium, например, или нет?

На изображении вы можете увидеть некоторые данные API сайта.

Большое спасибо!

Пример изображения

Ответ №1:

Для анализа этого объекта требуется много работы, но это можно сделать. Для перехвата этих сетевых вызовов вы можете использовать библиотеку selenium-wire

 from seleniumwire import webdriver  # Import from seleniumwire

driver = webdriver.Chrome(executable_path=r"E:chromedriver.exe")

driver.get('https://www.delhaize.be/nl-be/shop/Verse-groenten-en-fruit/c/v2FRU?q=:relevanceamp;sort=relevance')

#accept that privacy to enable the analitics
driver.find_element_by_xpath("//button[contains(@data-testid,'cookie-popup-accept')]").click()

# Access requests via the `requests` attribute
for request in driver.requests:
    if request.response:
        if request.url == 'https://api.delhaize.be/':
            print(
                request.url,
                request.body,
                request.response.status_code,
                request.response.headers['Content-Type']
            )
 

Ответ будет примерно таким, что потребует синтаксического анализа:

 https://api.delhaize.be/ b'{"operationName":"GetCategoryProductSearch","variables":{"lang":"nl","searchQuery":":relevance","sort":"relevance","category":"v2FRU","pageNumber":0,"pageSize":20,"filterFlag":true},"query":"query GetCategoryProductSearch($anonymousCartCookie: String, $lang: String, $searchQuery: String, $pageSize: Int, $pageNumber: Int, $category: String, $sort: String, $filterFlag: Boolean) {\n  categoryProductSearch(anonymousCartCookie: $anonymousCartCookie, lang: $lang, searchQuery: $searchQuery, pageSize: $pageSize, pageNumber: $pageNumber, category: $category, sort: $sort, filterFlag: $filterFlag) {\n    products {\n      ...ProductBlockDetails\n      __typename\n    }\n    breadcrumbs {\n      ...Breadcrumbs\n      __typename\n    }\n    facets {\n      ...Facets\n      __typename\n    }\n    sorts {\n      name\n      selected\n      code\n      __typename\n    }\n    pagination {\n      ...Pagination\n      __typename\n    }\n    currentQuery {\n      query {\n        value\n        __typename\n      }\n      __typename\n    }\n    categorySearchTree {\n      categoryDataList {\n        categoryCode\n        categoryData {\n          facetData {\n            count\n            name\n            query {\n              query {\n                value\n                __typename\n              }\n              url\n              __typename\n            }\n            selected\n            __typename\n          }\n          subCategories\n          __typename\n        }\n        __typename\n      }\n      level\n      __typename\n    }\n    __typename\n  }\n}\n\nfragment ProductBlockDetails on Product {\n  available\n  averageRating\n  numberOfReviews\n  manufacturerName\n  manufacturerSubBrandName\n  code\n  freshnessDuration\n  freshnessDurationTipFormatted\n  frozen\n  recyclable\n  images {\n    format\n    imageType\n    url\n    __typename\n  }\n  maxOrderQuantity\n  limitedAssortment\n  name\n  onlineExclusive\n  potentialPromotions {\n    alternativePromotionMessage\n    code\n    priceToBurn\n    promotionType\n    range\n    redemptionLevel\n    toDisplay\n    description\n    title\n    promoBooster\n    simplePromotionMessage\n    __typename\n  }\n  price {\n    approximatePriceSymbol\n    currencySymbol\n    formattedValue\n    priceType\n    supplementaryPriceLabel1\n    supplementaryPriceLabel2\n    showStrikethroughPrice\n    discountedPriceFormatted\n    unit\n    unitCode\n    unitPrice\n    value\n    __typename\n  }\n  purchasable\n  productProposedPackaging\n  productProposedPackaging2\n  stock {\n    inStock\n    inStockBeforeMaxAdvanceOrderingDate\n    partiallyInStock\n    availableFromDate\n    __typename\n  }\n  url\n  previouslyBought\n  nutriScoreLetter\n  __typename\n}\n\nfragment Breadcrumbs on SearchBreadcrumb {\n  facetCode\n  facetName\n  facetValueName\n  facetValueCode\n  removeQuery {\n    query {\n      value\n      __typename\n    }\n    __typename\n  }\n  __typename\n}\n\nfragment Facets on Facet {\n  code\n  name\n  category\n  facetUiType\n  values {\n    code\n    count\n    name\n    query {\n      query {\n        value\n        __typename\n      }\n      __typename\n    }\n    selected\n    __typename\n  }\n  __typename\n}\n\nfragment Pagination on Pagination {\n  currentPage\n  totalResults\n  totalPages\n  sort\n  __typename\n}\n"}' 200 application/json; charset=utf-8