无法使用selenium和Python从URL获取正确的解码json响应

2024-10-01 09:21:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从如下url获取json响应

https://www.skroutz.gr/personalization/16890962/product_prices.js?_=1569161647

使用

driver.get(url2besearched)

我得到的结果是:

SKR.page.blps = [{"id":42507097,"final_price":530.25,"payment_method_cost":"\u003cem\u003e+ 3,00 €\u003c/em\u003e \u003cspan\u003eΑντικαταβολή\u003c/span\u003e","net_price":527.25,"net_price_formatted":"527,25 €","final_price_formatted":"530,25 €","shop_id":514,"no_credit_card":false,"sorting_score":[-4.8549,-340,-83,514,10],"shipping_cost":"\u003cem\u003e+ 0,00 €\u003c/em\u003e \u003cspan\u003eΜεταφορικά\u003c/span\u003e","link":"/products/show/42507097"},{"id":42755991,"final_price":532.7,"payment_method_cost":"\u003cem\u003e+ 2,50 €\u003c/em\u003e \u003cspan\u003eΑντικαταβολή\u003c/span\u003e","net_price":530.2,"net_price_formatted":"530,20 €","final_price_formatted":"532,70 €","shop_id":9,"no_credit_card":false,"sorting_score":[-3.45507,-107,-179,9,10],"shipping_cost":"\u003cem\u003e+ 0,00 €\u003c/em\u003e \u003cspan\u003eΜεταφορικά\u003c/span\u003e","link":"/products/show/42755991"},{"id":42901383,"final_price":507.8,"payment_method_cost":"\u003cem\u003e+ 2,90 €\u003c/em\u003e \u003cspan\u003eΑντικαταβολή\u003c/span\u003e","net_price":502.0,"net_price_formatted":"502,00 €","final_price_formatted":"507,80 €","shop_id":394,"no_credit_card":false,"sorting_score":[-4.67046,-198,-199,394,10],"shipping_cost":"\u003cem\u003e+ 2,90 €\u003c/em\u003e \u003cspan\u003eΜεταφορικά\u003c/span\u003e","link":"/products/show/42901383"};
if (typeof performance !== 'undefined' && typeof performance.mark!=='undefined'){
performance.mark('BLP.response');
}

我试过了驱动程序。获取(url2beserched).json(),但我得到的“NoneType”对象没有属性“json”

如何获得shopid和最终价格的值?你知道吗


Tags: idjsonnetpaymentpricemethodfinalspan
2条回答

您需要解析响应以只获得{"id":42507097,"final_price"...}字符串,然后json.loads(parsedResp),因此与您的问题相关,我的解决方案是:

import requests
import json

responseRow = requests.request('GET',
    'https://www.skroutz.gr/personalization/16890962/product_prices.js?_=1569161647')

responseTmp = responseRow.text
responseList = responseTmp.split('=')
responseParsed = responseList[1].split(';')[0]
responseList = json.loads(responseParsed)
print(responseList[0]['shop_id'])
print(responseList[0]['final_price_formatted'])

我试过了

fp = urllib.request.urlopen(url2besearched)
mybytes = fp.read()

mystr = mybytes.decode("utf8")
fp.close()
mystr = mystr.rsplit('=')
mystr = mystr[1].split(";")
mystr = mystr[0]    
json_str = json.loads(mystr)

但我不确定这是不是一个正确的方法

相关问题 更多 >