简体   繁体   中英

JSONDecodeError: Expecting value: line 1 column 1 (char 0), I am getting this error

How to fix this error JSONDecodeError: Expecting value: line 1 column 1 (char 0)? Below is the code

    from urllib.request import urlopen
    api_url = "https://samples.openweathermap.org/data/2.5/weatherq=London&mode=html&appid=b6907d289e10d714a6e88b30761fae22"
url_result = urlopen(api_url)
data = url_result.read()
data=data.decode('utf-8')
import json
json_data = json.loads(data)

You are making a request with mode=html then attempting to parse the response as JSON. You can dynamically pick up the correct urls by first getting a list of the available samples (and modes) from the base domain. The filter for what you want. JSON is the default to doesn't need the mode specified. The advantage here is you dynamically pick up the appid.

I show html and JSON responses below.


import requests
from bs4 import BeautifulSoup as bs

with requests.Session() as s:
    r = s.get('https://samples.openweathermap.org/').json()
    samples = r['products']['current_weather']['samples'] 
    url_html = [sample for sample in samples if 'London&mode=html' in sample][0]
    print(url_html)
    print()
    r = s.get(url_html)
    soup = bs(r.content, 'lxml')
    print(soup.get_text())
    print()
    url_json = [sample for sample in samples if 'London&appid' in sample][0]
    print(url_json)
    print()
    r = s.get(url_json).json()
    print(r)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM