Я пытаюсь создать набор данных для извлечения информации с pawrade.com обо всех перечисленных «французских бульдогах».
Я запустил скрипт очистки, но не могу похоже, столбец «Статус» работает правильно. Если вы попали в списки проданных щенков, то увидите надпись «Этого щенка больше нет в наличии». сообщение. Я использую это сообщение, чтобы определить, продан ли щенок в столбце «Статус».
import requests
from bs4 import BeautifulSoup
import csv
# Function to scrape a single page
def scrape_page(url, csv_writer):
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
spans = soup.find_all("span", class_="fave position-absolute")
for span in spans:
adid = span.get("data-adid")
name = span.get("data-name")
breed = span.get("data-breed")
price = span.get("data-price")
puppy_url = f"https://www.pawrade.com/puppies/french-bulldog/{adid}"
# Extract additional details from the puppy's individual page
puppy_response = requests.get(puppy_url)
puppy_soup = BeautifulSoup(puppy_response.content, "html.parser")
dob = extract_detail(puppy_soup, "fa-birthday-cake")
weight = extract_detail(puppy_soup, "fa-weight")
registration = extract_detail(puppy_soup, "fa-trophy")
color = extract_detail(puppy_soup, "fa-palette")
release_date = extract_detail(puppy_soup, "fa-calendar-alt")
microchip = extract_detail(puppy_soup, "fa-microchip")
# Determine status based on the presence of specific messages
status = "available"
if puppy_soup.find("h4", class_="mb-0") and "This puppy is no longer available." in puppy_soup.find("h4", class_="mb-0").text:
status = "sold"
csv_writer.writerow([adid, name, breed, price, puppy_url, dob, weight, registration, color, release_date, microchip, status])
# Helper function to extract details based on class
def extract_detail(soup, class_name):
detail_element = soup.find("span", class_=class_name)
if detail_element:
detail_text = detail_element.find_next_sibling("div").find("small").text.strip()
return detail_text
return ""
# URL of the first page of listings
base_url = "https://www.pawrade.com/puppies/french-bulldog/"
# Create a CSV file
with open("french_bulldogs.csv", mode="w", newline="", encoding="utf-8") as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(["AdID", "Name", "Breed", "Price", "URL", "DOB", "Weight", "Registration", "Color", "Release Date", "Microchip", "Status"])
# Scrape the first page to get the total number of pages
response = requests.get(base_url)
soup = BeautifulSoup(response.content, "html.parser")
# Example logic to determine total pages - this may need adjustment based on actual site structure
pagination = soup.find("ul", class_="pagination")
if pagination:
pages = pagination.find_all("li", class_="page-item")
total_pages = int(pages[-2].text.strip()) # Adjust the logic to find the total number of pages
else:
total_pages = 1 # Default to 1 if no pagination found
# Iterate through all pages
for page in range(1, total_pages + 1):
url = f"{base_url}?page={page}"
scrape_page(url, csv_writer)
print("Data has been written to french_bulldogs.csv")
Подробнее здесь: https://stackoverflow.com/questions/787 ... the-this-p
Может ли кто-нибудь помочь мне определить, «продан» ли щенок, на основании сообщения «Этот щенок больше не доступен» в с ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение