Working With APIs in Python - Pagination and Data Extraction

Sdílet
Vložit
  • čas přidán 7. 08. 2024
  • In this video I will show you how to work with an API using Python to extract data. Using the requests module
    we can request the data in JSON format and then parse it out. Each response comes with some extra info too that
    we can use to work out how many pages we need to request and the total amount of items we should expect to get.
    Working with APIs in Python is a core skill for any developer so hopefully you can use this video as a good learning
    resource and start requesting data from APIs in your own projects!
    Support Me:
    Amazon US: amzn.to/2OzqL1M
    Amazon UK: amzn.to/2OYuMwo
    Hosting: Digital Ocean: m.do.co/c/c7c90f161ff6
    Gear Used: jhnwr.com/gear/ (NEW)
    Patreon: / johnwatsonrooney (NEW)
    Scraper API: www.scrapingbee.com/?fpr=jhnwr
    -------------------------------------
    Disclaimer: These are affiliate links and as an Amazon Associate I earn from qualifying purchases
    -------------------------------------
    timestamps
    00:00 - Intro
    00:56 - Endpoints
    03:42 - Code Example
    21:20 - Results and Outro
  • Věda a technologie

Komentáře • 129

  • @Kyosika
    @Kyosika Před 2 lety +14

    Thanks for linking this video John!

  • @francol.dejuana7862
    @francol.dejuana7862 Před rokem +12

    Love you man, i saw like 10 videos about APIs request and data pull. All of them with over 1M viewers.. and they all just show how to code the request and not anything else, which is equal to nothing, what a waste of time. This video is simple, concrete, and right to the point. You surely deserve more viewers.

  • @ArjunSahni
    @ArjunSahni Před 2 lety +9

    Love the way you have started from scratch and have gradually paced up to the pagination part. Very short and crisp way of teaching, much appreciated! 🙌

  • @alexcorrea8971
    @alexcorrea8971 Před 3 lety +21

    love your way of teaching, straightforward with no fluff, thank you!

  • @alzahalemn7322
    @alzahalemn7322 Před 9 měsíci +3

    This should be the first video recommended when you search for making API requests. Went through the video quickly but will be watching slowly tomorrow while coding alongside the video :)

  • @adamisherwood6708
    @adamisherwood6708 Před 3 lety +7

    I have to say that you have given on your channel the most comprehensive insight in to scraping of any person on this platform. For that I must say a very big thank you.

  • @katiboo
    @katiboo Před rokem +2

    Best explanation I have ever heard. With your help I was able to figure it all out. thanks for what you do.

  • @MrMLBson09
    @MrMLBson09 Před 2 lety +6

    Extremely helpful. Cannot thank you enough for this.

  • @RachelODonnell-px5mp
    @RachelODonnell-px5mp Před 9 měsíci +1

    I loved this thank you so much. Your explanations were perfect , detailed yet to the point!

  • @jarekmor
    @jarekmor Před 2 lety +4

    I am just starting to learn Python programming and I can say that you are my best and favorite Teacher! Thank you!

  • @dhanishasharma2573
    @dhanishasharma2573 Před rokem

    i was able to do it, this is a great video!
    lots of respect and love to you man!🌻

  • @jasonanderson7175
    @jasonanderson7175 Před rokem +2

    This is the best tutorial on APIs that I have watched. It's excellent!

  • @HarryLuap
    @HarryLuap Před 3 lety +3

    Best tutorial on this topic i found so far! Thanks man!

  • @diegomairena
    @diegomairena Před 3 lety +1

    Nice one John! Love working with an API me. This is great :)

  • @NotBeHaris
    @NotBeHaris Před 3 lety +4

    Awesome sir. Your way of teaching is so good.

  • @Guzguz28
    @Guzguz28 Před rokem +2

    What a great presentation, thnx John

  • @THEREALDATALORD
    @THEREALDATALORD Před měsícem

    This was wildly useful. Thank you for sharing your knowledge with the plebs.

  • @chuxTube68
    @chuxTube68 Před rokem +1

    This was a very helpful walk-through - Thanks for the great content! :)

  • @tittuc1480
    @tittuc1480 Před rokem +1

    tremendous experience I 've completed this tutorial & clear crystal for each topics ,thank you for taking much more efforts

  • @chrisgousset8673
    @chrisgousset8673 Před 2 lety +1

    Great and informative video, thank you so much!

  • @makoakaleo4653
    @makoakaleo4653 Před rokem +1

    Awesome explanation! Thanks a ton.

  • @arpitakar3384
    @arpitakar3384 Před 25 dny +1

    The Zorr of Web Scraping..
    Thanks 😊 giving this to us

  • @robertburroughs5056
    @robertburroughs5056 Před rokem +2

    nice well structured video.

  • @salvationwithoutregret9781

    Really neat an well structured Video and Code! Thank you kind Sir!

  • @fredericogoncalves1938
    @fredericogoncalves1938 Před 6 měsíci

    Thanks John! I learned a lot with your video!

  • @abbasnorouzi5199
    @abbasnorouzi5199 Před rokem +1

    Thank you John , very helpful

  • @fdama
    @fdama Před rokem +1

    Useful tutorial. Thanks.

  • @klkev6511
    @klkev6511 Před 3 měsíci

    I learned a lot. Thank you very much!

  • @Podoco_music
    @Podoco_music Před 8 měsíci

    learing about api's and found your video. great project! easy to follow along and replicate. thank you!

  • @lechendemstephen1378
    @lechendemstephen1378 Před 6 měsíci

    i had some confusion about API's but you just made it look very simple

  • @bronxandbrenx
    @bronxandbrenx Před 2 lety +1

    Thank you, I will make this as my reference :)

  • @inesesteves375
    @inesesteves375 Před rokem +1

    great video!!

  • @mickwilson99
    @mickwilson99 Před měsícem

    Excellent! Thank you so much.

  • @laredoeneko
    @laredoeneko Před 7 měsíci +1

    Fantastic, very good explain it. You got a new subscriber

  • @pcservicelondon
    @pcservicelondon Před 2 měsíci +1

    awesome video :) thank you

  • @Talha_khalid_786
    @Talha_khalid_786 Před 3 měsíci

    Wonderful tutorial ever : ) thanks

  • @PeterFletcherDNADeliverer

    great video, thank you

  • @surajsuryawanshi386
    @surajsuryawanshi386 Před 2 lety +1

    Thanks.This is great :)

  • @syedghufranhassan3858
    @syedghufranhassan3858 Před 2 lety +1

    awesome tutorial sir

  • @RS-Amsterdam
    @RS-Amsterdam Před 3 lety +4

    Great video John, very helpful and thanks for sharing.
    Maybe one suggestion to think over .
    The little pip of your face is in de right hand down corner.
    But most of the output of the terminal is also down under so (and I have noticed in many of your video's) the output is often hidden behind that small screen.
    Maybe it would be better to put it (the PIP) in the top righthand corner.
    Anyways, thanks for the effort of making these video's.
    In the past I had to search in YT for solutions for my questions but now since I found your channel, all the(my) answers are here in one channel.

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před 3 lety +1

      Good suggestion thank you, I will check goign forward not to block the terminal output and move my camera picture if needed!

  • @SilverLake.
    @SilverLake. Před rokem +1

    Thank you for your video.

  • @naveentda
    @naveentda Před 2 lety

    Thanks a lot for this video John 😀

  • @harshithaml1481
    @harshithaml1481 Před 5 měsíci +1

    This video is very informative

  • @mpfiesty
    @mpfiesty Před 6 měsíci

    Well done sir

  • @wangdanny178
    @wangdanny178 Před 2 lety +1

    ok thanks again for your video. Now I am getting a better idea of scraping through api.

  • @jiewang6449
    @jiewang6449 Před rokem +1

    Like your video! Thanks

  • @joaquinbaeza4034
    @joaquinbaeza4034 Před 2 lety +1

    great video thnks!!!

  • @Guzguz28
    @Guzguz28 Před rokem +1

    Thank you for a great presentation

  • @rajkumarrajan8059
    @rajkumarrajan8059 Před 10 měsíci +1

    Simple and superb!!!

  • @igordc16
    @igordc16 Před 2 lety +1

    I wish I had watched this video before, it sure would've had helped me. The other two videos about API that you did, it was helpful to, but they were too short. I like long videos where you explain everything details by details.

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před 2 lety

      Great, I’m glad this one was able to help you, thanks for watching

  • @sallycakes472
    @sallycakes472 Před 3 lety

    Love ur stuff John, keep going. ATM dealing with an api that needs a bearer token, that changes daily. Am stumped ATM, need to figure that out otherwise I cant print price no more 😪

  • @yigittilaver3334
    @yigittilaver3334 Před rokem +1

    Thanks a lot

  • @lordlucan9568
    @lordlucan9568 Před 3 lety +1

    Thanks 👍

  • @nazeemoftheclouddistrict7205

    Amazing!!!

  • @tubelessHuma
    @tubelessHuma Před 3 lety +3

    Very important subject in web scraping. Need more tutorials on it if possible. Thanks for adding value.💖👌🌹

  • @veeru2310
    @veeru2310 Před rokem +1

    wow nice content exactly i am looking same nice explanation

  • @venkatabora1459
    @venkatabora1459 Před 3 lety +1

    Great Video and an awesome teaching. But what if your api allows you to make asynchronous call? How should we handle pagination in such cases?

  • @pashadjoystick
    @pashadjoystick Před rokem +1

    watched this video because of learning english :) thank you for clenan english

  • @yusufuthman8571
    @yusufuthman8571 Před 2 lety

    Thank you for this video, It is very help as it solves most of the challenges with my use case.
    The only challenge is that, I needed to save the raw JSON data I to the data.
    How d you suggest I go about it?

  • @Obnotikus
    @Obnotikus Před rokem +2

    Hello, thank you for the video.
    I wanted to ask what extension/program you are using to make the API's more readable in your browser. Thank you

  • @ESTEBAN51321
    @ESTEBAN51321 Před 2 lety

    Hi John, great explanation!. The process is the the same when I have a page_token instead of a page number?. Thanks

  • @quynhnlp5086
    @quynhnlp5086 Před 3 lety +2

    always support with full view, like your video as a thanks to your teaching. Looking forward for your sharing more in SQL and APIs :)

  • @sampson14567
    @sampson14567 Před 2 lety +1

    I have a question. When you are using a list for organizing data into pandas, how do you specify an area that is below episodes?

  • @thepakcolapcar
    @thepakcolapcar Před 8 měsíci

    very nicely put together; I have been working api's using python and this video helps.
    One thing I always been trying/looking for is that, is there a way to create a generic python project to handle any api rest calls? I am aware that each api is customized by the api provider but just still trying to come up with something generic. Any thoughts/suggestions on this lines?

  • @kashifrana6798
    @kashifrana6798 Před 2 měsíci

    Amazing content. Is there any video to work api with postman?

  • @khandoor7228
    @khandoor7228 Před 2 lety +1

    good content good style i sub'd thanks John

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před 2 lety

      Thanks glad you like it 👍

    • @khandoor7228
      @khandoor7228 Před 2 lety

      @@JohnWatsonRooney Hey John since you are online may I make a request? Can you do something with a rest api and specifically querystringparameters? Like GET requests with 3 or 4 parameters? I have not seen a good tutorial online on the topic.

  • @Ventoria
    @Ventoria Před měsícem

    thank you thank you thank you

  • @westinthatcher2003
    @westinthatcher2003 Před 4 měsíci

    Where does 'response' come from in the second function that was created?

  • @jakewalker1586
    @jakewalker1586 Před 2 lety

    What is your career advice John?

  • @tsgla
    @tsgla Před rokem

    I get an error for the last for loop and using the 'mainlist'
    TypeError: 'NoneType' object is not iterable.
    I don't really understand why I'm getting that, I followed everything the same and it all worked up until the last part.

  • @hbhavsi
    @hbhavsi Před 5 měsíci

    What browser are you using that shows the number items in results? I tried Brave (based on Chromium) with a prettier JSON extension, and even Firefox, but when I collapse results, I don't see the number of items. TIA!

  • @cloudproblemssolved
    @cloudproblemssolved Před 4 měsíci +1

    20:07 I had a problem with pandas being unrecognized, but i fixed it by using pip3 install pandas
    instead of
    pip install pandas
    Hope this helps!

  • @manikandanmanickam9433

    Hai John, I need the data scraping form tha Google results with number of results and multi threading concept. If you make a video for this. It's will helpful for me

  • @oscarmartinezbeltran
    @oscarmartinezbeltran Před 2 lety

    Hi John: I love your channel !!!! Fantastic! Keep it up!
    I have one question:
    in minute 11 when you are building def get_pages(response):
    instead of pages = data ['info']['pages'] you put pages =response ['info']['pages'] .
    You replace data with response.
    My question : response = to what ?
    You mean: response = r .json ?
    why?
    thankyou for your help!

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před 2 lety

      The "response" is the json data that i am taking from the first function and passing into the second one. This function just parses the data, so we need to give it that data

    • @oscarmartinezbeltran
      @oscarmartinezbeltran Před 2 lety +1

      @@JohnWatsonRooney Thanks John for your quick reply. I understand your explanation. And now I see that here response = main_request(baseurl, endpoint).

  • @Draco-pu4ro
    @Draco-pu4ro Před 3 lety

    Awesome!! What if for each api call you get only 1000 records with 100 records per page and you need to get 20k records from your api in total. How to handle such cases?

  • @moin213
    @moin213 Před 2 lety

    Suggest a way to return 2 million records from a paginated API when the limit is set to 10k records. What should be the approach using python?

  • @marialaranjo394
    @marialaranjo394 Před rokem

    corrigi a 3 para isto (para incluir math. e statistics.). Só que agora dá um erro a dizer: "'float' object is not iterable"
    import math
    import statistics
    def normalization(list):
    newList = []
    if len(list)

  • @boringhuman9427
    @boringhuman9427 Před 3 měsíci

    def parse_json(response):
    return [{'Name':item['name'],'No_Episodes':len(item['episode'])} for item in response['results']]
    we could have used dict/list comprehension

  • @AlexABC-qj6ns
    @AlexABC-qj6ns Před rokem

    2)
    def custom_operator(numbers):
    length = len(numbers)
    output = [2 * numbers[0]] # Double the first number

    if length > 2:
    for i in range(1, length - 1):
    result = sum(numbers[:i] + numbers[i+1:]) * numbers[i]
    output.append(result)
    output.append(2 * numbers[-1]) # Double the last number
    return output

  • @aymanraouf1820
    @aymanraouf1820 Před 10 měsíci

    I am a complete beginner here. Just to understand what you did in laymans term. You basically mirrored the website into python and extracted information from it. Is this correct? And somehow, you also made the data in JSON format for ease of interpretation by Python.

  • @dbarhate
    @dbarhate Před 2 lety

    Thanks. Is it possible to share python file.

  • @rameshks5281
    @rameshks5281 Před 3 lety

    Hi sir u do with some external file like csv or excel file sir n read from excel and write back to that excel or csv file sir

    • @f34tur3
      @f34tur3 Před 3 lety

      Use pandas. You're welcome!

  • @uneebbhatti1388
    @uneebbhatti1388 Před rokem +1

    Which theme he is using please tell me

  • @leonardsteele764
    @leonardsteele764 Před rokem

    John, would you know where I can find information on calling two APIs at once and using that data with Python?

    • @leonardsteele764
      @leonardsteele764 Před rokem +1

      Also, thanks for this video

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před rokem

      hey thanks. if you wanted to call 2 different API's you can do it the same way from the same script, just change the URL

    • @leonardsteele764
      @leonardsteele764 Před rokem

      Thanks @@JohnWatsonRooney . I just want to be clear on this. If my transaction data api has customerID (int) and my customer data has customerID and I want to pull the transactions and include the customer name, not ID, I would use two URLs. Would I then have if tdata['customerID'] = cdata['customerID'] print cdata['customername']?

  • @imaginary8168
    @imaginary8168 Před rokem +1

    What are you using that your API is so much more readable? When I click on the link, I get a continuous line of text, not an organized block of text divided into different categories.

    • @JohnWatsonRooney
      @JohnWatsonRooney  Před rokem

      I’m the browser? Firefox does it by default- or the app I use is called insomnia to make api requests

    • @imaginary8168
      @imaginary8168 Před rokem

      @@JohnWatsonRooney I'll check those out, thanks John!

  • @deveshsharma607
    @deveshsharma607 Před 2 lety

    any links to the code

  • @AlexABC-qj6ns
    @AlexABC-qj6ns Před rokem

    3)
    def create_dictionary_from_csv(filename, separator):
    with open(filename, 'r') as file:
    lines = file.readlines()
    keys = lines[0].strip().split(separator)
    dictionary = {}
    for key in keys:
    dictionary[key] = []
    for line in lines[1:]:
    values = line.strip().split(separator)
    for i in range(len(keys)):
    dictionary[keys[i]].append(values[i])
    return dictionary

  • @SilverLake.
    @SilverLake. Před rokem

    Example, in the API End point preview shows {"id":1, "displineID":2}, {"id":2, "displineID":1}, {"id":3, "displineID":3}, {"id":4, "displineID":1}, {"id":5, "displineID":2}
    I want to find
    1. Get id numbers of the "displineID": 2 only
    2. Get id number of the first "displineID": 2 only
    3. Get id number of the second "displineID": 2 only
    How can I write this in Python? If you have a video or coding relate to this, would you share the link please?
    Postman Preview
    [
    {
    "id": "129",
    "audioRecordingUrl": null,
    "disciplineId": 2,
    "howObtainedId": 8,
    "teamId": 20,
    }
    ]
    },
    {
    "id": "128",
    "audioRecordingUrl": null,
    "disciplineId": 3,
    "howObtainedId": 8,
    "teamId": 19,
    ]
    },

  • @joanabras3018
    @joanabras3018 Před rokem

    3 corrigida!!:
    def normalization(list):
    newList = []
    if len(list)

  • @joanabras3018
    @joanabras3018 Před rokem

    3
    def normalization(list):
    newList = []
    if len(list)

  • @AkshayKaushik
    @AkshayKaushik Před 3 lety

    Brother, please try to maintain playlists according to the Library name.

  • @AlexABC-qj6ns
    @AlexABC-qj6ns Před rokem

    1)
    def square_cross(num):
    if num < 4:
    return "The minimum size is 4"
    if (num % 2) == 1:
    return "Please provide an even number"
    solution = ""
    for i in range(num):
    if (i == 0):
    solution += "*" * num + "
    "
    elif (i == (num - 1)):
    solution += "*" * num
    else:
    solution += "*" + (num - 2) * " " + "*" + "
    "

  • @SejuaniMedio
    @SejuaniMedio Před rokem +1

    Best Yt chanel. This knowledge only uses to be available on paid content. So thank you so much :)

  • @joanabras3018
    @joanabras3018 Před rokem

    1a parte do 4 corrigida -> no str_(self)
    class Car:
    def _init_(self,plate_number,fuel_available,fuel_full_cap,fuel_type):
    self.plate_number = plate_number
    self.fuel_available = fuel_available
    self.fuel_full_cap = fuel_full_cap
    self.fuel_type = fuel_type

    def refill(self,liters):
    if self.fuel_available + liters > self.fuel_full_cap:
    self.fuel_available = self.fuel_full_cap
    else:
    self.fuel_available += liters
    def _str_(self):
    return "{}
    Fuel available: {}
    Fuel type: {}".format(self.plate_number,self.fuel_available,self.fuel_type)

  • @marialaranjo394
    @marialaranjo394 Před rokem

    ainda não consegui fazer nenhum ahah nem com o chat :/

  • @joanabras3018
    @joanabras3018 Před rokem

    4
    class Car:
    def _init_(self,plate_number,fuel_available,fuel_full_cap,fuel_type):
    self.plate_number = plate_number
    self.fuel_available = fuel_available
    self.fuel_full_cap = fuel_full_cap
    self.fuel_type = fuel_type

    def refill(self,liters):
    if self.fuel_available + liters > self.fuel_full_cap:
    self.fuel_available = self.fuel_full_cap
    else:
    self.fuel_available += liters
    def _str_(self):
    return "{}
    Fuel Available: {}
    FuelType: {}".format(self.plate_number,self.fuel_available,self.fuel_type)

  • @AlexABC-qj6ns
    @AlexABC-qj6ns Před rokem

    1)
    def square_cross(num):
    if num < 4:
    return "The minimum size is 4"
    if (num % 2) == 1:
    return "Please provide an even number"
    solution = ""
    for i in range(num):
    if (i == 0):
    solution += "*" * num + "
    "
    elif (i == (num - 1)):
    solution += "*" * num
    else:
    solution += "*" + (num - 2) * " " + "*" + "
    "