Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

JSON from webpage into Python script: urllib.error.HTTPError: HTTP Error 403: Forbidden

I made a program and it works with a local json (data) file!

Code Block:

def datas(self):        
        
        with open ("C:\\Users\\Messi\\Desktop\\Python\\\\tek.json", "r") as dosya:            
            dataApi = json.load(dosya)     
        return dataApi

I uploaded this data json to a website which is a Lemp Server!
https://bestpurpleshampoo.com/tek.json

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I changed the code block to the:

import urllib.request, json 
with urllib.request.urlopen("https://bestpurpleshampoo.com/tek.json") as url:
    dataApi= json.load(url)
return dataApi

There is an error:

    Traceback (most recent call last):
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 150, in <module>
     BetpredictorApp().run()
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 954, in run
     self._run_prepare()
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 923, in _run_prepare
     self.load_kv(filename=self.kv_file)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 696, in load_kv
     root = Builder.load_file(rfilename)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\lang\builder.py", line 305, in load_file
     return self.load_string(data, **kwargs)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\lang\builder.py", line 403, in load_string
     widget = Factory.get(parser.root.name)(__no_builder=True)
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 16, in __init__
     self.data = self.datas()
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 134, in datas
     with urllib.request.urlopen("https://bestpurpleshampoo.com/tek.json") as url:
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 214, in urlopen
     return opener.open(url, data, timeout)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 523, in open
     response = meth(req, response)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 632, in http_response
     response = self.parent.error(
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 561, in error
     return self._call_chain(*args)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 494, in _call_chain
     result = func(*args)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\urllib\request.py", line 641, in http_error_default
     raise HTTPError(req.full_url, code, msg, hdrs, fp)
 urllib.error.HTTPError: HTTP Error 403: Forbidden

Also:
https://www.pythonpool.com/urllib-error-httperror-http-error-403-forbidden/

from urllib import request
from urllib.request import Request, urlopen     
url = "https://bestpurpleshampoo.com/tek.json"
request_site = Request(url, headers={"User-Agent": "Mozilla/5.0"})
webpage = urlopen(request_site).read()
print(webpage[:500])

In above solution i got:

Traceback (most recent call last):
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 151, in <module>
     BetpredictorApp().run()
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 954, in run
     self._run_prepare()
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 923, in _run_prepare
     self.load_kv(filename=self.kv_file)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\app.py", line 696, in load_kv
     root = Builder.load_file(rfilename)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\lang\builder.py", line 305, in load_file
     return self.load_string(data, **kwargs)
   File "C:\Users\Messi\anaconda3\envs\kivyEnv\lib\site-packages\kivy\lang\builder.py", line 403, in load_string
     widget = Factory.get(parser.root.name)(__no_builder=True)
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 16, in __init__
     self.Today = self.todayMatches()
   File "c:\Users\Messi\Desktop\Python\Projects\Football Tips\Kivy\main.py", line 124, in todayMatches
     for i in range(len(self.data['today']["home"])):
 TypeError: byte indices must be integers or slices, not str

How possible is it that this json is works perfect locally! Team names are STR and stats are also integer! But with above method that i get error

I tried some other methods in but not tried all!
How to get JSON from webpage into Python script

Could you please help me to fix this 🙂
I have 500 hours on Python that i like it but stucked here

Thanks

>Solution :

I’m not 100% sure I understand what the problem is, but if I use this code it works fine from my system:

import requests
url = "https://bestpurpleshampoo.com/tek.json"
response = requests.get(url).json()
print(response['today']['home'])

Result:

['Ajax', 'Liverpool', 'Club Brugge', 'FC Porto'... truncated ...]

If you need to install requests library, use: pip install requests

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading