Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Break out of nested loops
#11
Why write this?
def get_html(BASE_URL, current_page, base_session):
    #Get request
    response = base_session.get(BASE_URL.format(current_page), headers=HEADERS)
    return response
What benefit is derived by writing this function that just calls another function? Does it make the code easier to understand? Does it introduce an important abstraction? I don't think it does either, and adding a function just adds code. How about doing this instead:
def get_soup(session, page):
    '''Return steamy bowl of soup for BASE_URL page.  Return None if request fails'''
    session = session.get(BASE_URL.format(page), headers=HEADERS)
    if session.status_code == 200:
        return BeautifulSoup(session.text, 'lxml')
    return None
This barely meets my minimum requirements for making a function but at least it does something interesting. It is a soup factory. Give it a URL and a page and it returns soup. Notice I removed the URL argument. I assume the URL and the HEADERS argument are closely tied. If so either pass both as arguments or pass neither. If you pass the URL as an argument, use lower case. Save all upper case for global variables.

Now you can write your code like this:
def get_authors():  # Use meaningful function names, not Parse
    '''Loop through BASE_URL pages collecting author tags.  Return list of authors'''
    authors = []
    page = 1
    session = requests.Session()
   
    while True:
        soup = get_soup(session, page)
        if soup is None:
            print("I'm hungry")  # Should probably raise an exception
            break

        for name in soup.select('.author'):
            authors.append(name.text)
             
        if not(soup.select_one('li.next')):  
            break      
        page += 1
    return authors

if __name__ == '__main__':
    save_csv(get_authors(), 'example.csv')
You still get to have functions, but now each does something useful and has a purpose you can describe using one sentence. get_soup() retruns soup for a page, save_csv() will eventually save a list to a csv file, and get_authors returns a list of authors from a URL. If you parameterized the URL, HEADER and tag these might all be reusable.
Reply


Messages In This Thread
Break out of nested loops - by muzikman - Sep-15-2021, 06:02 PM
RE: Break out of nested loops - by muzikman - Sep-16-2021, 02:34 PM
RE: Break out of nested loops - by deanhystad - Sep-16-2021, 03:37 PM
RE: Break out of nested loops - by muzikman - Sep-16-2021, 05:53 PM
RE: Break out of nested loops - by muzikman - Sep-16-2021, 06:00 PM
RE: Break out of nested loops - by deanhystad - Sep-16-2021, 07:31 PM
RE: Break out of nested loops - by muzikman - Sep-17-2021, 03:06 PM
RE: Break out of nested loops - by muzikman - Sep-17-2021, 04:18 PM
RE: Break out of nested loops - by deanhystad - Sep-17-2021, 05:34 PM
RE: Break out of nested loops - by muzikman - Sep-17-2021, 05:48 PM
RE: Break out of nested loops - by deanhystad - Sep-17-2021, 07:31 PM
RE: Break out of nested loops - by muzikman - Sep-18-2021, 12:59 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  for loops break when I call the list I'm looping through Radical 4 929 Sep-18-2023, 07:52 AM
Last Post: buran
  reduce nested for-loops Phaze90 11 1,961 Mar-16-2023, 06:28 PM
Last Post: ndc85430
  Nested for loops: Iterating over columns of a DataFrame to plot on subplots dm222 0 1,746 Aug-19-2022, 11:07 AM
Last Post: dm222
  Nested for loops - help with iterating a variable outside of the main loop dm222 4 1,636 Aug-17-2022, 10:17 PM
Last Post: deanhystad
  breaking out of nested loops Skaperen 3 1,260 Jul-18-2022, 12:59 AM
Last Post: Skaperen
  How to break out of nested loops pace 11 5,449 Mar-03-2021, 06:25 PM
Last Post: pace
  Nested for Loops sammay 1 9,150 Jan-09-2021, 06:48 PM
Last Post: deanhystad
  How to make this function general to create binary numbers? (many nested for loops) dospina 4 4,487 Jun-24-2020, 04:05 AM
Last Post: deanhystad
  Conditionals, while loops, continue, break (PyBite 102) Drone4four 2 3,004 Jun-04-2020, 12:08 PM
Last Post: Drone4four
  Python beginner - nested while loops mikebarden 1 1,889 Jun-01-2020, 01:04 PM
Last Post: DPaul

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020