[text] x

Viewer

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4.  
  5. s = requests.Session()
  6. username = "Grace Redding"
  7. password = "Beckett1234"
  8.  
  9. def login_and_get_week_ending_dates():
  10.     s.auth = (username, password)
  11.     login_url = "http://www.waitroseconnect.co.uk/names.nsf?Login"
  12.     payload = {'username': username, 'password': password}
  13.     s.post(login_url, data=payload)
  14.     link = f"http://www.waitroseconnect.co.uk/waitroseconnect/reference/WaitroseConnectSalesV2.nsf/WeeklyDataDocsViewForm?OpenForm=&DBPath=domcfg.nsf&Server_Name=www.waitroseconnect.co.uk&Username={username}&Password={password}"
  15.     response = s.get(link)
  16.     soup = BeautifulSoup(response.content, 'html.parser')
  17.     week_ending_dates = []
  18.     for date_elem in soup.find_all("a", href=True):
  19.         date_text = date_elem.get_text().strip()
  20.         if date_text and date_text != "Page Help":
  21.             week_ending_dates.append(date_text)
  22.     return week_ending_dates
  23.  
  24. def get_corresponding_week_number(date_to_find, week_ending_dates):
  25.     for i, date in enumerate(week_ending_dates[::-1], start=9):
  26.         if date == date_to_find:
  27.             week_number = str(i).zfill(2)
  28.             return week_number
  29.     return -1
  30.  
  31. def construct_url_for_week_ending_date(selected_date,corresponding_week_number):
  32.     base_url = f"http://www.waitroseconnect.co.uk/waitroseconnect/reference/WaitroseConnectSalesV2.nsf/LookupWeeklyLineBranchSalesAgent?OpenAgent&{corresponding_week_number}&s=135186&s=U&s=2024&s={selected_date}&s=1&s=2&s=0&s=135186"
  33.     return base_url
  34.  
  35. def get_response_from_url(url):
  36.     response = s.get(url)
  37.     return response
  38.  
  39. def download_csv_sales_data(weekendyear,corresponding_week_number):
  40.     downloadurl = f"http://www.waitroseconnect.co.uk/waitroseconnect/reference/WaitroseConnectSalesV2.nsf/SalesData.csv?OpenAgent&WebLookupWeeklyLineBranchSalesData135186{weekendyear}{corresponding_week_number}&s=LB"
  41.     response = s.get(downloadurl)
  42.     return response.text
  43.  
  44. def save_to_csv(entries, filename):
  45.     with open(f"/Workspace/Users/[email protected]/waitrose/reports/{filename}", "w", newline='') as file:
  46.         writer = csv.writer(file)
  47.         writer.writerows(entries)
  48.  
  49. def main():
  50.     week_ending_dates = login_and_get_week_ending_dates()
  51.     print("Select a Week Ending Date:")
  52.     for i, date in enumerate(week_ending_dates[::-1], start=1):
  53.         print(f"{i}. {date}")
  54.     selected_index = int(input("Please enter the number corresponding to your desired week ending date: "))
  55.     adjusted_index = len(week_ending_dates) - selected_index
  56.     selected_date = week_ending_dates[adjusted_index]
  57.     print(f"You selected: {selected_date}")
  58.     corresponding_week_number = get_corresponding_week_number(selected_date, week_ending_dates)
  59.     print(f"Corresponding number for {selected_date}: {corresponding_week_number}")
  60.     url = construct_url_for_week_ending_date(selected_date,corresponding_week_number)
  61.     response = get_response_from_url(url)
  62.     soup = BeautifulSoup(response.content, 'html.parser')
  63.     plain_text = soup.get_text()
  64.     weekendyear = selected_date.split("/")[2]
  65.     csvfile = download_csv_sales_data(weekendyear,corresponding_week_number)
  66.     #print(csvfile)
  67.     entries = [line.split(",") for line in csvfile.strip().split("\n")]
  68.     filename = f"WebLookupWeeklyLineBranchSalesData135186{weekendyear}{corresponding_week_number}.csv"
  69.     if csvfile:
  70.         save_to_csv(entries, filename)
  71.         print(f"File '{filename}' downloaded and saved in DBFS.")
  72.     else:
  73.         print("Failed to download the file.")
  74.  
  75. if __name__ == "__main__":
  76.     main()

Editor

You can edit this paste and save as new:


File Description
  • x
  • Paste Code
  • 07 May-2024
  • 3.57 Kb
You can Share it: