Advertisement
Guest User

Untitled

a guest
Aug 11th, 2024
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. import requests
  2. import pandas as pd
  3. from bs4 import BeautifulSoup
  4.  
  5. def fetch_tables_from_wikipedia(url):
  6.     # Fetch the content from the Wikipedia page
  7.     response = requests.get(url)
  8.     soup = BeautifulSoup(response.content, 'html.parser')
  9.  
  10.     # Find all tables in the page
  11.     tables = soup.find_all('table', {'class': 'wikitable'})
  12.  
  13.     return tables
  14.  
  15. def calculate_levels(table):
  16.     # Convert the table to a DataFrame
  17.     df = pd.read_html(str(table))[0]
  18.  
  19.     low_levels = []
  20.     high_levels = []
  21.  
  22.     for level_range in df['Levels']:
  23.         try:
  24.             # Split the level range, e.g., "5-10" -> [5, 10]
  25.             lower, upper = map(int, level_range.split('-'))
  26.             low_levels.append(lower)
  27.             high_levels.append(upper)
  28.         except ValueError:
  29.             # If the level range is a single number, just treat it as both lower and upper
  30.             level = int(level_range)
  31.             low_levels.append(level)
  32.             high_levels.append(level)
  33.  
  34.     # Calculate the average low and high levels
  35.     avg_low_level = sum(low_levels) / len(low_levels) if low_levels else None
  36.     avg_high_level = sum(high_levels) / len(high_levels) if high_levels else None
  37.  
  38.     return avg_low_level, avg_high_level
  39.  
  40. url = 'https://en.wikipedia.org/wiki/List_of_Dungeons_%26_Dragons_modules'
  41.  
  42. # Fetch the tables from Wikipedia
  43. tables = fetch_tables_from_wikipedia(url)
  44.  
  45. # Lists to store average low and high levels
  46. all_avg_low_levels = []
  47. all_avg_high_levels = []
  48.  
  49. for table in tables:
  50.     try:
  51.         avg_low, avg_high = calculate_levels(table)
  52.         if avg_low is not None and avg_high is not None:
  53.             all_avg_low_levels.append(avg_low)
  54.             all_avg_high_levels.append(avg_high)
  55.     except Exception as e:
  56.         continue
  57.  
  58. # Calculate the overall average low and high level
  59. overall_avg_low_level = sum(all_avg_low_levels) / len(all_avg_low_levels) if all_avg_low_levels else None
  60. overall_avg_high_level = sum(all_avg_high_levels) / len(all_avg_high_levels) if all_avg_high_levels else None
  61.  
  62. print(f"Overall Average Low Level: {overall_avg_low_level:.2f}")
  63. print(f"Overall Average High Level: {overall_avg_high_level:.2f}")
  64. average = ((overall_avg_low_level+overall_avg_high_level)/2)
  65. print(f"Average Level: {average:.2f}")
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement