#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