From 0164f3fb92c7287088aa4dd49b483c78ab8915a9 Mon Sep 17 00:00:00 2001 From: Julien Brun Date: Wed, 21 Jan 2026 14:39:01 -0800 Subject: [PATCH 1/4] add more content to intro with why, be respectful and intro to http --- episodes/fig/http1-req-res-details.png | Bin 0 -> 37577 bytes episodes/fig/http1-url-structure.png | Bin 0 -> 21829 bytes episodes/hello-scraping.md | 48 ++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 episodes/fig/http1-req-res-details.png create mode 100644 episodes/fig/http1-url-structure.png diff --git a/episodes/fig/http1-req-res-details.png b/episodes/fig/http1-req-res-details.png new file mode 100644 index 0000000000000000000000000000000000000000..606d4696f4face55fa70ca0d3672ed4451f46f34 GIT binary patch literal 37577 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 Kqejgk?0*2{270pq literal 0 HcmV?d00001 diff --git a/episodes/fig/http1-url-structure.png b/episodes/fig/http1-url-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..20f4a78bc660678db71accbff9ddd100feee7909 GIT binary patch literal 21829 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 Date: Wed, 21 Jan 2026 16:34:22 -0800 Subject: [PATCH 2/4] Enhance web scraping functionality with error handling and fix data extraction logic --- episodes/a-real-website.md | 48 +++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/episodes/a-real-website.md b/episodes/a-real-website.md index 069234f..59416b5 100644 --- a/episodes/a-real-website.md +++ b/episodes/a-real-website.md @@ -56,11 +56,17 @@ from tqdm import tqdm # Getting the HTML from our desired URL as a text string url = 'https://carpentries.org/workshops/upcoming-workshops/' -req = requests.get(url).text +req = requests.get(url) -# Cleaning and printing the string -cleaned_req = re.sub(r'\s*\n\s*', '', req).strip() -print(cleaned_req[0:1000]) +# Checking if the request was successful +if req.status_code == 200: + req = req.text + + # Cleaning and printing the string + cleaned_req = re.sub(r'\s*\n\s*', '', req).strip() + print(cleaned_req[0:1000]) +else: + print(f"Failed to retrieve the webpage. Status code: {req.status_code}") ``` ```output @@ -114,7 +120,7 @@ soup = BeautifulSoup(cleaned_req, 'html.parser') # Finding all third-level headers and doing a formatted print h3_by_tag = soup.find_all('h3') print("Number of h3 elements found: ", len(h3_by_tag)) -for n, h3 in enumerate(h3_by_tag): +for n, h3 in enumerate(h3_by_tag, start=1): print(f"Workshop #{n} - {h3.get_text()}") ``` @@ -159,18 +165,18 @@ print(div_firsth3.prettify()) Remember, the output shown here is probably different than yours, as the website is continuously updated. ```output -

+
- + - Software Carpentry + Library Carpentry
- + - Puerto Rico + United States
@@ -181,12 +187,12 @@ Remember, the output shown here is probably different than yours, as the website

- - University of Puerto Rico + + University of North Texas

- Software Carpentry (Shell, Git, R for Reproducible Scientific Analysis) + Library Carpentry (Intro to Data, Unix Shell, Git, and/or OpenRefine)
@@ -194,7 +200,7 @@ Remember, the output shown here is probably different than yours, as the website : - Humberto Ortiz-Zuazaga, Airined Montes Mercado + Sarah Lynn Fisher, Maristella Feustle, Whitney Johnson-Freeman
@@ -203,11 +209,11 @@ Remember, the output shown here is probably different than yours, as the website : - Isabel Rivera, Diana Buitrago Escobar, Yabdiel Ramos Valerio + Marcia McIntosh, Trey Clark
- Jun 04 - Jun 10 2025 + Jan 22 - Jan 22 2026
``` @@ -246,11 +252,11 @@ workshop_list = [] for item in divs: dict_workshop = {} dict_workshop['host'] = item.find('h3').get_text() - dict_workshop['link'] = div_firsth3.find('h3').find('a').get('href') - dict_workshop['curriculum'] = div_firsth3.get('data-curriculum') - dict_workshop['country'] = div_firsth3.get('data-country') - dict_workshop['format'] = div_firsth3.get('data-meeting') - dict_workshop['program'] = div_firsth3.get('data-program') + dict_workshop['link'] = item.find('h3').find('a').get('href') # get is used to access attribute values as a dictionary + dict_workshop['curriculum'] = item.get('data-curriculum') + dict_workshop['country'] = item.get('data-country') + dict_workshop['format'] = item.get('data-meeting') + dict_workshop['program'] = item.get('data-program') workshop_list.append(dict_workshop) # Transform list into a DataFrame From 5d4d63cb3e05d38674ab1f2abb773e476d7c6467 Mon Sep 17 00:00:00 2001 From: jairomelo Date: Thu, 22 Jan 2026 13:38:47 -0800 Subject: [PATCH 3/4] Fix link extraction logic in workshop dictionary --- episodes/a-real-website.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/episodes/a-real-website.md b/episodes/a-real-website.md index 59416b5..e2612ec 100644 --- a/episodes/a-real-website.md +++ b/episodes/a-real-website.md @@ -230,7 +230,7 @@ As shown in the previous episode, we can store all this information in a Python # Create an empty dictionary and fill it with the info we are interested in dict_workshop = {} dict_workshop['host'] = div_firsth3.find('h3').get_text() -dict_workshop['link'] = div_firsth3.find('h3').find('a').get('href') +dict_workshop['link'] = div_firsth3.find('a').get('href') dict_workshop['curriculum'] = div_firsth3.get('data-curriculum') dict_workshop['country'] = div_firsth3.get('data-country') dict_workshop['format'] = div_firsth3.get('data-meeting') From 5ce4f61bc802b13b342eb81fe07ea683e772f8e8 Mon Sep 17 00:00:00 2001 From: jairomelo Date: Thu, 22 Jan 2026 13:40:44 -0800 Subject: [PATCH 4/4] Fix link extraction logic in workshop dictionary - is not necessary to iterate over h3 again to get the link --- episodes/a-real-website.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/episodes/a-real-website.md b/episodes/a-real-website.md index e2612ec..88fd9d6 100644 --- a/episodes/a-real-website.md +++ b/episodes/a-real-website.md @@ -252,7 +252,7 @@ workshop_list = [] for item in divs: dict_workshop = {} dict_workshop['host'] = item.find('h3').get_text() - dict_workshop['link'] = item.find('h3').find('a').get('href') # get is used to access attribute values as a dictionary + dict_workshop['link'] = item.find('a').get('href') # get is used to access attribute values as a dictionary dict_workshop['curriculum'] = item.get('data-curriculum') dict_workshop['country'] = item.get('data-country') dict_workshop['format'] = item.get('data-meeting') @@ -283,7 +283,7 @@ workshop_list = [] while child_div is not None: dict_workshop = {} dict_workshop['host'] = child_div.find('h3').get_text() - dict_workshop['link'] = child_div.find('h3').find('a').get('href') + dict_workshop['link'] = child_div.find('a').get('href') dict_workshop['curriculum'] = child_div.get('data-curriculum') dict_workshop['country'] = child_div.get('data-country') dict_workshop['format'] = child_div.get('data-meeting') @@ -325,7 +325,7 @@ workshop_list = [] for item in divs_past: dict_workshop = {} dict_workshop['host'] = item.find('h3').get_text() - dict_workshop['link'] = item.find('h3').find('a').get('href') + dict_workshop['link'] = item.find('a').get('href') dict_workshop['curriculum'] = item.get('data-curriculum') dict_workshop['country'] = item.get('data-country') dict_workshop['format'] = item.get('data-meeting') @@ -362,7 +362,7 @@ We only need to add three lines to our loop, and this is how it would look like. for item in divs: dict_workshop = {} dict_workshop['host'] = item.find('h3').get_text() - dict_workshop['link'] = item.find('h3').find('a')['href'] + dict_workshop['link'] = item.find('a')['href'] dict_workshop['curriculum'] = item.get('data-curriculum') dict_workshop['country'] = item.get('data-country') dict_workshop['format'] = item.get('data-meeting')