Может ли кто-нибудь помочь мне определить, «продан» ли щенок, на основании сообщения «Этот щенок больше не доступен» в сPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Может ли кто-нибудь помочь мне определить, «продан» ли щенок, на основании сообщения «Этот щенок больше не доступен» в с

Сообщение Anonymous »

Я пытаюсь создать набор данных для извлечения информации с 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»