import json import requests from bs4 import BeautifulSoup import pandas as pd FILES_DIR = './files' def main(filename): with open(input_filename, 'r') as f: configuration_doc_html = f.read() soup = BeautifulSoup(configuration_doc_html, "html.parser") # Step 2: Parse the webpage content data = [] # Locate the configuration settings table or sections sections = soup.find_all("div", class_="sect1") # Adjust this to match the webpage structure for section in sections: group = section.find("h2").get_text(strip=True) settings = section.find_all("div", class_="sect2") for setting in settings: setting_name = setting.select("h3 code")[0].text setting_info = setting.select('table tr') description = setting_info[0].select('td')[1].text valid_values = setting_info[1].select('td')[1].text try: default_value = setting_info[2].select('td')[1].text except IndexError: default_value = None # Check for tags indicating dynamic or deprecated # dynamic = "Dynamic" in row.get_text() # deprecated = "Deprecated" in row.get_text() # Append to the data list data.append({ "Settings Group": group, "Setting": setting_name, "Description": "\n".join([line for line in description.splitlines() if line.strip()]), "Valid Values": valid_values, "Default Value": default_value, # "Dynamic": dynamic, # "Deprecated": deprecated }) # Step 3: Create a DataFrame and export # df = pd.DataFrame(data) # df.to_excel(f'{FILES_DIR}/{output_filename}', index=False, engine='openpyxl') return data def get_renamed_settings(): doc_page = _html_to_bs(f'{FILES_DIR}/neo4j_docs/v5_changes.html') result = [] rows = doc_page.find(id='_renamed').find_next_sibling().find_all('tr') for i, row in enumerate(rows): try: result.append( { 'v4': row.select('td')[1].text, 'v5': row.select('td')[2].text, } ) except: pass return result def get_deprecated_settings(): doc_page = _html_to_bs(f'{FILES_DIR}/neo4j_docs/v5_changes.html') result = [] rows = doc_page.find(id='_configuration_settings_deprecated_in_neo4j_5_x').find_next_sibling().find_all('tr') for i, row in enumerate(rows): try: version = '' try: version = row.select('td')[2].select('.label--deprecated')[0].text except: pass result.append( { 'deprecated_setting': row.select('td')[0].text, 'deprecated_setting_description': row.select('td')[1].text, 'deprecated_version': version } ) except: pass return result def _html_to_bs(filename): with open(filename, 'r') as f: configuration_doc_html = f.read() return BeautifulSoup(configuration_doc_html, "html.parser") if __name__ == "__main__": input_filename = f'{FILES_DIR}/neo4j_docs/configuration_doc_v5.html' output_filename = 'neo4j_configuration_settings_v4.xlsx' v5_properties = main(input_filename) with open(f'{FILES_DIR}/neo4j_docs/v5_settings.json', 'w') as f: json.dump(v5_properties, f) # renamed_settings = get_renamed_settings() # with open(f'{FILES_DIR}/neo4j_docs/renamed_settings.json', 'w') as f: # json.dump(renamed_settings, f) # deprecated_settings = get_deprecated_settings() # with open(f'{FILES_DIR}/neo4j_docs/deprecated_settings.json', 'w') as f: # json.dump(deprecated_settings, f)