下面是一个例子:
import requests
import json
url = "https://www.galaxus.ch/api/graphql/enter-search"
payload = json.dumps([
{
"operationName": "ENTER_SEARCH",
"variables": {
"limit": 24,
"offset": 0,
"query": "8719934001237",
"filters": [],
"sortOrder": None,
"include": [
"bra",
"pt",
"pr",
"off"
],
"searchQueryId": "5ca2074a-59ea-44be-a6b4-74946d50285c",
"siteId": None
},
"query": "query ENTER_SEARCH($query: String!, $sortOrder: ProductSort, $limit: Int = 9, $offset: Int = 0, $filters: [SearchFilter], $include: [String!], $exclude: [String!], $searchQueryId: String, $rewriters: [String!], $siteId: String) {\n search(\n query: $query\n filters: $filters\n searchQueryId: $searchQueryId\n rewriters: $rewriters\n siteId: $siteId\n ) {\n products(limit: $limit, offset: $offset, sortOrder: $sortOrder) {\n total\n hasMore\n nextOffset\n results {\n ...ProductSearchResult\n __typename\n }\n __typename\n }\n filters(include: $include, exclude: $exclude) {\n product {\n identifier\n name\n filterType\n score\n tooltip {\n ...FilterTooltipResult\n __typename\n }\n ...CheckboxSearchFilterResult\n ...RangeSearchFilterResult\n __typename\n }\n __typename\n }\n magazinePages(limit: 3) {\n ids {\n id\n score\n __typename\n }\n total\n __typename\n }\n authors(limit: 3) {\n ids {\n id\n score\n __typename\n }\n total\n __typename\n }\n discussions(limit: 3) {\n ids {\n id\n score\n __typename\n }\n total\n __typename\n }\n questions(limit: 3) {\n ids {\n id\n score\n __typename\n }\n total\n __typename\n }\n ratings(limit: 3) {\n ids {\n id\n score\n __typename\n }\n total\n __typename\n }\n productTypes(limit: 24) {\n total\n results {\n id\n name\n primarySynonyms\n isVisible\n description\n metaDescription\n imageUrl\n searchScore\n __typename\n }\n __typename\n }\n brands(limit: 24) {\n total\n results {\n id\n title\n searchScore\n __typename\n }\n __typename\n }\n _meta {\n queryInfo {\n correctedQuery\n didYouMeanQuery\n lastProductSearchPass\n executedSearchTerm\n testGroup\n isManagedQuery\n isRerankedQuery\n __typename\n }\n redirectionUrl\n portalReferral {\n productCount\n portalName\n url\n productImageUrls\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment ProductSearchResult on ProductSearchResultItem {\n searchScore\n mandatorSpecificData {\n ...ProductMandatorSpecific\n __typename\n }\n product {\n ...ProductMandatorIndependent\n __typename\n }\n offer {\n ...ProductOffer\n __typename\n }\n __typename\n}\n\nfragment FilterTooltipResult on FilterTooltip {\n text\n moreInformationLink\n __typename\n}\n\nfragment CheckboxSearchFilterResult on CheckboxSearchFilter {\n options {\n identifier\n name\n productCount\n score\n referenceValue {\n value\n unit {\n abbreviation\n __typename\n }\n __typename\n }\n preferredValue {\n value\n unit {\n abbreviation\n __typename\n }\n __typename\n }\n tooltip {\n ...FilterTooltipResult\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment RangeSearchFilterResult on RangeSearchFilter {\n referenceMin\n preferredMin\n referenceMax\n preferredMax\n referenceStepSize\n preferredStepSize\n rangeMergeInfo {\n isBottomMerged\n isTopMerged\n __typename\n }\n referenceUnit {\n abbreviation\n __typename\n }\n preferredUnit {\n abbreviation\n __typename\n }\n rangeFilterDataPoint {\n ...RangeFilterDataPointResult\n __typename\n }\n __typename\n}\n\nfragment ProductMandatorSpecific on MandatorSpecificData {\n isBestseller\n isDeleted\n showroomSites\n sectorIds\n __typename\n}\n\nfragment ProductMandatorIndependent on ProductV2 {\n id\n productId\n name\n nameProperties\n productTypeId\n productTypeName\n brandId\n brandName\n averageRating\n totalRatings\n totalQuestions\n isProductSet\n images {\n url\n height\n width\n __typename\n }\n energyEfficiency {\n energyEfficiencyColorType\n energyEfficiencyLabelText\n energyEfficiencyLabelSigns\n energyEfficiencyImage {\n url\n height\n width\n __typename\n }\n __typename\n }\n seo {\n seoProductTypeName\n seoNameProperties\n productGroups {\n productGroup1\n productGroup2\n productGroup3\n productGroup4\n __typename\n }\n gtin\n __typename\n }\n hasVariants\n smallDimensions\n basePrice {\n priceFactor\n value\n __typename\n }\n __typename\n}\n\nfragment ProductOffer on OfferV2 {\n id\n productId\n offerId\n shopOfferId\n price {\n amountIncl\n amountExcl\n currency\n fraction\n __typename\n }\n deliveryOptions {\n mail {\n classification\n futureReleaseDate\n __typename\n }\n pickup {\n siteId\n classification\n futureReleaseDate\n __typename\n }\n detailsProvider {\n productId\n offerId\n quantity\n type\n __typename\n }\n __typename\n }\n label\n type\n volumeDiscountPrices {\n minAmount\n price {\n amountIncl\n amountExcl\n currency\n __typename\n }\n isDefault\n __typename\n }\n salesInformation {\n numberOfItems\n numberOfItemsSold\n isEndingSoon\n validFrom\n __typename\n }\n incentiveText\n isIncentiveCashback\n isNew\n isSalesPromotion\n hideInProductDiscovery\n canAddToBasket\n hidePrice\n insteadOfPrice {\n type\n price {\n amountIncl\n amountExcl\n currency\n fraction\n __typename\n }\n __typename\n }\n minOrderQuantity\n __typename\n}\n\nfragment RangeFilterDataPointResult on RangeFilterDataPoint {\n count\n referenceValue {\n value\n unit {\n abbreviation\n __typename\n }\n __typename\n }\n preferredValue {\n value\n unit {\n abbreviation\n __typename\n }\n __typename\n }\n __typename\n}\n"
}
])
headers = {
'accept-language': 'de-CH',
'content-type': 'application/json',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
然而,当我把它转换成scrapy请求时,仅仅改变“body”的“data”参数,我就得到了400错误。我已经看到了堆栈溢出的可能解决方案,但似乎都不起作用。
1条答案
按热度按时间mec1mxoz1#
我修正了它,当提出一个零碎的要求时,需要消除正文开头和结尾的“[]”