Basic Web Scraping is one of the essentials for a Data Analyst. The ability to get your own data for Project Purpose is an undervalued task.
I recently scraped some data from 4 big art shops (websites) in Nigeria and I would like to share the codes (ChatGPT included codes) for learning purposes(Other Data analyst who might find it useful).
The first website is Crafts Village I scarped the Art-tools category.
code for scraping the website
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
# Initialize lists to store the data
product_names = []
prices = []
# Scrape all 6 pages
for page in range(1, 7):
url = f"https://craftsvillage.com.ng/product-category/art-tools/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# Find the relevant HTML elements for product information
products = soup.find_all("li", class_="product")
# Extract data from each product element
for product in products:
# Product name
name_element = product.find("a", class_="woocommerce-LoopProduct-link")
name = name_element.text.replace("\n", "").strip()
name = re.sub(r"[₦\,|–]", "", name) # Remove unwanted characters
product_names.append(name)
# Price
price_element = product.find("bdi")
price = price_element.text if price_element else None
prices.append(price)
# Create a Pandas DataFrame from the scraped data
data = {
"Product Name": product_names,
"Price": prices
}
df = pd.DataFrame(data)
# Remove "\n\n\n\n\n" from "Product Name" column
df["Product Name"] = df["Product Name"].str.replace("\n", "")
# Display the Data Frame
print(df)
To get the name element class, I inspected the name class from my browser by putting the cursor on the product name right click my mouse pad and clicking on inspect.
I also did same for the price too
The code above extracted the product name and prices from all the 6 pages in the Art tool category.
Here is how I scraped information from Crafties Hobbies
import requests
from bs4 import BeautifulSoup
import pandas as pd
base_url = 'https://craftieshobbycraft.com/product-category/painting-drawing/page/{}/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# Create lists to store data
categories = []
product_names = []
product_prices = []
# Iterate over each page
for page in range(1, 8):
url = base_url.format(page)
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
category_elements = soup.find_all('p', class_='category uppercase is-smaller no-text-overflow product-cat op-7')
product_names_elements = soup.find_all('a', class_='woocommerce-LoopProduct-link woocommerce-loop-product__link')
product_prices_elements = soup.find_all('bdi')
for category_element, product_name_element, product_price_element in zip(category_elements, product_names_elements, product_prices_elements):
category = category_element.get_text(strip=True)
product_name = product_name_element.get_text(strip=True)
product_price = product_price_element.get_text(strip=True)
categories.append(category)
product_names.append(product_name)
product_prices.append(product_price)
# Create a pandas DataFrame
data = {
'Category': categories,
'Product Name': product_names,
'Product Price': product_prices
}
df = pd.DataFrame(data)
# Print the DataFrame
print(df)
Here is how I scraped data from Kaenves store
import requests
from bs4 import BeautifulSoup
import pandas as pd
# Create empty lists to store the data
product_names = []
prices = []
# Iterate through each page
for page in range(1, 4):
# Send a GET request to the page
url = f"https://www.kaenves.store/collections/floating-wood-frame?page={page}"
response = requests.get(url)
# Create a BeautifulSoup object to parse the HTML content
soup = BeautifulSoup(response.content, 'html.parser')
# Find all span elements with the specified class
price_elements = soup.find_all('span', class_='price-item price-item--regular')
name_elements = soup.find_all('h3', class_='card__heading h5')
# Extract the prices and product names
for price_element, name_element in zip(price_elements, name_elements):
price = price_element.get_text(strip=True)
name = name_element.get_text(strip=True)
product_names.append(name)
prices.append(price)
# Create a pandas DataFrame
data = {'Product Name': product_names, 'Price': prices}
df = pd.DataFrame(data)
# Save the DataFrame as a CSV file
df.to_csv('paperandboard.csv', index=False)
Here is how I scraped data from Art Easy
import requests
from bs4 import BeautifulSoup
import pandas as pd
prices = []
product_names = []
# Iterate over all 2 pages
for page_num in range(1, 3):
url = f"https://arteasy.com.ng/product-category/canvas-surfaces/page/{page_num}/"
# Send a GET request to the URL
response = requests.get(url)
# Parse the HTML content
soup = BeautifulSoup(response.text, "html.parser")
# Find all the span elements with class "price"
product_prices = [span.get_text(strip=True) for span in soup.find_all("span", class_="price")]
# Find all the h3 elements with class "product-title"
product_names += [product_name.get_text(strip=True) for product_name in soup.find_all("h3", class_="product-title")]
# Add the prices to the list
prices += product_prices
# Check if the lengths of product_names and prices are equal
if len(product_names) == len(prices):
# Create a pandas DataFrame
data = {"Product Name": product_names, "Price": prices}
df = pd.DataFrame(data)
# Print the DataFrame
print(df)
else:
print("Error: The lengths of product_names and prices are not equal.")
If you want to reuse this code ensure to change the URL to your preferred e-commerce website and also change the class to your URL product name and product price class
These informations scraped can be used for the following;
Price comparison: You can use the scraped data to compare prices of products across different websites. This can help you find the best deal on the product you are looking for.
Product research: You can use the scraped data to research products. This can help you learn more about a product's features, specifications, and reviews.
Market analysis: You can use the scraped data to analyze the market for a particular product. This can help you identify trends and opportunities.
Product recommendations: You can use the scraped data to recommend products to users. This can help you increase sales and improve customer satisfaction.
Top comments (0)