BeautifulSoup извлекает и анализирует данные — от European Volunteering-Services: крошечного парсера, который собирает вPython

Программы на Python
Гость
BeautifulSoup извлекает и анализирует данные — от European Volunteering-Services: крошечного парсера, который собирает в

Сообщение Гость »


Я ищу публичный список волонтерских услуг в Европе: мне нужны не полные адреса, а название и веб-сайт. Я думаю о данных... XML, CSV... с такими полями: имя, страна - и еще какими-то полями, было бы неплохо по одной записи на страну присутствия. Кстати: европейские волонтерские службы — отличный вариант для молодежи.
Ну, я нашел отличную страницу, которая очень и очень информативна — см.
хотите собрать данные из европейских волонтерских служб, размещенных на европейском сайте:
https://youth.europa.eu/ go-abroad/volunteering/opportunities_en
У нас там есть несколько сотен возможностей для волонтерской деятельности, которые хранятся на таких сайтах:

Код: Выделить всё

 https://youth.europa.eu/solidarity/placement/39020_en

https://youth.europa.eu/solidarity/placement/38993_en

https://youth.europa.eu/solidarity/placement/38973_en

https://youth.europa.eu/solidarity/placement/38972_en

https://youth.europa.eu/solidarity/placement/38850_en

https://youth.europa.eu/solidarity/placement/38633_en
идея:
Я думаю, было бы здорово собрать данные, то есть с помощью парсера, основанного на BS4 и запросы – анализ данных и последующая печать данных в кадре данных
Ну – я думаю, что мы могли бы перебрать все URL-адреса :

Код: Выделить всё

placement/39020_en
placement/38993_en
placement/38973_en
placement/38850_en
Я думаю, что мы можем выполнить итерацию от нуля до 100 000 в хранилище, чтобы получить все результаты, которые хранятся в местах размещения. Но эта идея не подкреплена кодексом. Другими словами, на данный момент у меня нет идеи, как реализовать эту особую идею итерации по такому большому диапазону:
На данный момент я думаю, что это базовый подход к начните с этого:

Код: Выделить всё

import requests
from bs4 import BeautifulSoup
import pandas as pd

# List of URLs to scrape
urls = [
"https://youth.europa.eu/solidarity/placement/39020_en",
"https://youth.europa.eu/solidarity/placement/38993_en",
"https://youth.europa.eu/solidarity/placement/38973_en",
"https://youth.europa.eu/solidarity/placement/38972_en",
"https://youth.europa.eu/solidarity/placement/38850_en",
"https://youth.europa.eu/solidarity/placement/38633_en"
]

# Function to scrape data from a single URL
def scrape_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# Extracting relevant data
title = soup.find("h2").text.strip()
location = soup.find("span", class_="field--name-field-placement-location").text.strip()
start_date = soup.find("span", class_="field--name-field-placement-start-date").text.strip()
end_date = soup.find("span", class_="field--name-field-placement-end-date").text.strip()

# Returning data as dictionary
return {
"Title": title,
"Location": location,
"Start Date": start_date,
"End Date": end_date,
"URL": url
}

# Scrape data from all URLs
data = []
for url in urls:
data.append(scrape_data(url))

# Convert data to DataFrame
df = pd.DataFrame(data)

# Print DataFrame
print(df)
Это дает мне следующее

Код: Выделить всё

AttributeError                            Traceback (most recent call last)

 in ()
36 data = []
37 for url in urls:
---> 38     data.append(scrape_data(url))
39
40 # Convert data to DataFrame

 in scrape_data(url)
20     # Extracting relevant data
21     title = soup.find("h2").text.strip()
---> 22     location = soup.find("span", class_="field--name-field-placement-location").text.strip()
23     start_date = soup.find("span", class_="field--name-field-placement-start-date").text.strip()
24     end_date = soup.find("span", class_="field--name-field-placement-end-date").text.strip()

AttributeError: 'NoneType' object has no attribute 'text'


Источник: https://stackoverflow.com/questions/781 ... ces-a-tiny

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