Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## for https://stackoverflow.com/q/75828625/6146136
- # !!pip install --upgrade --pre pandas==1.5.0 ## this solution requires pandas 1.5.0
- import pandas as pd
- output_fp = 'digital-innovation-hubs.csv'
- dfList, pg_num, max_pg = [], 0, 3
- base_url = 'https://s3platform.jrc.ec.europa.eu/digital-innovation-hubs-tool'
- while (pg_num:=pg_num+1) and (not isinstance(max_pg,int) or pg_num<max_pg):
- pg_url = f'{base_url}?_eu_europa_ec_jrc_dih_web_DihWebPortlet_cur={pg_num}'
- try: dfList += pd.read_html(pg_url, extract_links='all')[:1]
- except Exception as e: pg_num, _ = -1, print(f'\n{e!r} from {pg_url}')
- else: print('', end=f'\rScraped {len(dfList[-1])} rows from {pg_url}')
- # df = pd.concat(dfList) ## if you don't want to add a column for page numbers
- df = pd.concat(
- dfList, keys=list(range(1,len(dfList)+1)), names=['from_pg','pgi']
- ).reset_index().drop('pgi',axis='columns')
- ## clean up - separate links from text
- orig_cols = [c for c in df.columns if c != 'from_pg']
- for ocn in orig_cols:
- if any(vals:=[cv for cv,*_ in df[ocn]]): df[ocn[0]] = vals
- if any(links:=[c[1] for c in df[ocn]]): df[ocn[0].split()[0]+' Links'] = links
- if 'Email Links' in df.columns:
- df['Email'] = df['Email Links'].str.replace('mailto:', '', 1)
- df = df.drop('Email Links', axis='columns')
- df = df.drop(orig_cols, axis='columns')
- ## save csv file
- df.to_csv(output_fp, index=False)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement