为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2022-06-02 18:15:58
我正在尝试从如下网址获取 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');}我试过 driver.get(url2besearched).json() 但我得到 'NoneType' 对象没有属性 'json'如何获取 shopid 和 final_price_formatted 的值?
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您需要解析响应以仅获取{"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'])


查看完整回答
反对 回复 2022-06-02
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

我试过了


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)

但我不确定这是否是正确的方法


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号