🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)
🔧 AI Nachrichten Major AI platforms go down in unprecedented simultaneous outage(03.09.2026 um 17:34 Uhr)
🔧 AI Nachrichten ChatGPT, Claude, and Grok Down? Users Report Widespread Outages(03.09.2026 um 19:14 Uhr)
🔧 AI Nachrichten OpenAI Launches GPT-6 Astra, Says We May Have Entered the AGI Era(03.09.2026 um 22:08 Uhr)
🔧 AI Nachrichten Claude Comes to CarPlay as Fifth Major AI Chatbot App(05.09.2026 um 05:31 Uhr)
🔧 AI Nachrichten OpenAI’s GPT-6 Astra Is AGI, Says NVIDIA CEO Jensen Huang(07.09.2026 um 06:31 Uhr)
🔧 AI Nachrichten Blame AI companies for Mac mini and Mac Studio shortage(31.08.2026 um 10:32 Uhr)

🔧 Programmierung 🕛 kürzlich 6 Min Lesezeit
0

Scrape but Validate: Data scraping with Pydantic Validation

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

Note: Not an output of chatGPT/ LLM



Data scraping is process of collecting data from public web sources and it is mostly done using script in a automated way. Due to automation, often collected data have errors and need to filter out and clean for use. However, it will be better if scraped data can be validate during scraping.



Considering the data validation requirement, most of scraping framework like Scrapy have inbuilt pattern that can be used for data validation. However, many a time, during the data scraping process, we often just use general purpose modules like requests and beautifulsoup for scraping. In such case, it is hard to validate the collected data, so this blog post explain a simple approach for data scraping with validation using Pydantic.







Plan of scraping :



In this blog, we will scrap quotes from the quotes site.

We will use requests and beautifulsoup to get the data Will create a pydantic data class to validate each scraped data Save the filtered and validated data in a json file.



For better arrangement and understanding, each step is implemented as a python method that can be used under main section.





Basic import





CODE
import requests # for web request
from bs4 import BeautifulSoup # cleaning html content

# pydantic for validation

from pydantic import BaseModel, field_validator, ValidationError

import json








1. Target site and getting quotes



We are using (



Below method is a general script to get html content for a given url.




CODE

def get_html_content(page_url: str) -> str:
page_content =""
# Send a GET request to the website
response = requests.get(url)
# Check if the request was successful (status code 200)
if response.status_code == 200:
page_content = response.content
else:
page_content = f'Failed to retrieve the webpage. Status code: {response.status_code}'
return page_content










2. Get the quote data from scraping



We will use requests and beautifulsoup to scraped the data from given urls. The process is broken into three parts: 1) Get the html content from the web 2) Extract the desired html tags for each targeted fields 3) Get the values from each tags




CODE

def get_tags(tags):
tags =[tag.get_text() for tag in tags.find_all('a')]
return tags










CODE

def get_quotes_div(html_content:str) -> str :
# Parse the page content with BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')

# Find all the quotes on the page
quotes = soup.find_all('div', class_='quote')

return quotes









Below script get the data point from each quote's div.






CODE
    # Loop through each quote and extract the text and author
for quote in quotes_div:
quote_text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
tags = get_tags(quote.find('div', class_='tags'))

# yied data to a dictonary
quote_temp ={'quote_text': quote_text,
'author': author,
'tags':tags
}









3. Create Pydantic dataclass and Validate the data for each quote



As per each fields of the quote, create a pydantic class and use same class for data validation during data scraping.






The pydantic model Quote



Below is the Quote class that is extended from BaseModel having three fields like quote_text, author, and tags. Out of these three, quote_text and author are type of string (str) and tags is a list type.



We have two validator methods (with decorators):



1) tags_more_than_two () : Will check that it must have more than two tags. (it is just for example, you can have any rule here)



2.) check_quote_text(): This method will remove "" from quote and test for text.




CODE

class Quote(BaseModel):
quote_text:str
author:str
tags: list

@field_validator('tags')
@classmethod
def tags_more_than_two(cls, tags_list:list) -> list:
if len(tags_list) <=2:
raise ValueError("There should be more than two tags.")
return tags_list

@field_validator('quote_text')
@classmethod
def check_quote_text(cls, quote_text:str) -> str:
return quote_text.removeprefix('').removesuffix('')









Getting and validating data



Data validation is very easy with pydantic, for example, below code, pass scraped data to pydantic class Quote.




CODE
quote_data = Quote(**quote_temp)









CODE

def get_quotes_data(quotes_div: list) -> list:
quotes_data = []

# Loop through each quote and extract the text and author
for quote in quotes_div:
quote_text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
tags = get_tags(quote.find('div', class_='tags'))

# yied data to a dictonary
quote_temp ={'quote_text': quote_text,
'author': author,
'tags':tags
}

# validate data with Pydantic model
try:
quote_data = Quote(**quote_temp)
quotes_data.append(quote_data.model_dump())
except ValidationError as e:
print(e.json())
return quotes_data









4. Store the data



Once data is validated that will be save to a json file. (A general purpose method is written that will convert Python dictionary to json file)




CODE

def list_of_dict_to_json(list_data_dict:list, filename:str)-> None:
"""This is a utiltiy method to write python dictonary data
to a json file.

Args:
list_data_dict (list): Python list of dict having the data
filename (str): Filename for the json file
example_data = [
{
'name':'ajit', 'age':30},
{
'name':'Raushan', 'age':30}
]

list_of_dict_to_json(example_data,
'names') # output: names.json
"""
# check given filename, if ends with .json or not
if not filename.endswith('.json'):
filename = filename+'.json'

# Write data to a JSON file
with open(filename, 'w') as json_file:
json.dump(list_data_dict, json_file, indent=4)









Putting all together



After understanding each piece of scraping, now , you can put all together and run the scraping for data collection.




CODE

if __name__ == '__main__':
# URL of the Quotes to Scrape website
url = 'http://quotes.toscrape.com/'
# 1. get the content
page_html = get_html_content(url)
# 2. get the div for each quote
quotes_div = get_quotes_div(page_html)
# 3. validate and get the data point
quotes_data = get_quotes_data(quotes_div)
# 4. Store the data to json
list_of_dict_to_json(quotes_data, 'quotes')







Note: A revision is planned, let me know your idea or suggestion to include in the revised version.



Links and resources:





Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
3 Quellen
GPT-6 Astra Release Today? OpenAI’s Next Major AI Model Is Almost Here
1 Quelle
Apple accuses OpenAI of destroying evidence as trade-secrets fight intensifies
1 Quelle
Major AI platforms go down in unprecedented simultaneous outage
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Scrape but Validate: Data scraping with Pydantic Validation

Thematisch verwandte Begriffe: Scrape, Validate, Data, scraping · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...