ValueError: ни один объект JSON не может быть декодирован с помощью Python

У меня есть допустимый json, который я не могу прочитать, используя Python и получая ошибку,

ValueError: No JSON object could be decoded using Python 

Код выглядит следующим образом,

import json, requests

page = "http://www.zillow.com/search/GetResults.htm?spt=homes&status=110001&lt=001000&ht=111111&pr=,&mp=,&bd=2%2C&ba=0%2C&sf=,&lot=,&yr=,&pho=0&pets=0&parking=0&laundry=0&income-restricted=0&pnd=0&red=0&zso=0&days=any&ds=all&pmf=1&pf=1&zoom=3&rect=-134340820,16594081,-56469727,54952386&p=1&sort=globalrelevanceex&search=maplist&disp=1&listright=true&isMapSearch=true&zoom=3"
response = requests.get(page) # request the json file
json_response =  json.loads(response.text) # parse the json file

Когда я открываю URL в браузере, я смог правильно увидеть файл JSON и могу проверить с помощью веб-сайта: http://codebeautify.org/jsonviewer. В чем проблема?

Когда я использую printresponse.text, я получаю следующие выходные данные:

u'<html><head><title>Zillow: Real Estate, Apartments, Mortgage &amp; Home Values in the US</title><meta http-equiv="X-UA-Compatible" content="IE=8, IE=9"/><meta name="ROBOTS" content="NOINDEX, NOFOLLOW"/><link href="//fonts.googleapis.com/css?family=Open+Sans:400&subset=latin" rel="stylesheet" type="text/css"/><link href="http://www.zillowstatic.com/vstatic/9520695/static/css/z-pages/captcha.css" type="text/css" rel="stylesheet" media="screen"/><script language="javascript">n            function onReCaptchaLoad() {n                window.reCaptchaLoaded = true;n            }nn            window.setTimeout(function () {n                if (!window.reCaptchaLoaded) {n                   document.getElementById('norecaptcha').value = true;n                   document.getElementById('captcha-form').submit();n                }n            }, 5000);n        </script></head><body><main class="zsg-layout-content"><div class="error-content-block"><div class="error-text-content"><!-- <h1>Captcha</h1> --><h5>Enter the characters in the images to continue.</h5><div id="content" class="captcha-container"><form method="POST" action="" id="captcha-form"><script type="text/javascript">rnvar RecaptchaOptions = {"theme":"white","lang":"en-US"};rn</script>rn<script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6Lf2nvMSAAAAAMQ5p6WlAfDEixMdOQgJsij-3_ud" onload="onReCaptchaLoad()"></script>rn<br/><input id="dest" name="dest" type="hidden" value="ognl:originalDestination"/><input id="norecaptcha" name="norecaptcha" type="hidden" value="false"/><button type="submit" class="zsg-button zsg-button_primary">Submit</button></form><img src="http://www.zillowstatic.com/static/logos/logo-65x14.png" width="65" alt="Zillow" height="14"></img></div></div></div></main></body></html><!-- H:049  T:0ms  S:1494  R:Thu May 26 23:12:41 PDT 2016  B:5.0.29554-release_20160512-lunar_lander.6d4c099~candidate.d23c8e0 -->'

Таким образом, кажется, что я не получаю JSOn от сервера, в то время как ссылка open является JSON в браузере (Chrome)

1 ответ

  1. При использовании запросов в качестве lib можно выполнить следующие действия:

    import requests as req
    
    page = "http://www.zillow.com/search/GetResults.htm?spt=homes&status=110001&lt=001000&ht=111111&pr=,&mp=,&bd=2%2C&ba=0%2C&sf=,&lot=,&yr=,&pho=0&pets=0&parking=0&laundry=0&income-restricted=0&pnd=0&red=0&zso=0&days=any&ds=all&pmf=1&pf=1&zoom=3&rect=-134340820,16594081,-56469727,54952386&p=1&sort=globalrelevanceex&search=maplist&disp=1&listright=true&isMapSearch=true&zoom=3"
    
    json_response = req.get(page).json()
    
    print type(json_response)
    
    >> <type 'dict'>
    

    Поехали !

    EDIT: Death-Stalker прав, вы попали на сайт слишком много раз, поэтому вы не получаете страницу, которую вы запрашиваете, но код в порядке, то, что я показал, является способом его упрощения. Если вы не используете другой IP-адрес для запроса веб-сайта, я не вижу решения.