@qw0cry

Как исправить ошибку в коде?

Следующий код:
import requests
from datetime import date, timedelta
import pandas as pd
from bs4 import BeautifulSoup
import csv

start_date = date.today()

days_in_period = 7

url = "https://world-weather.ru/"
response = requests.get(url)

soup=BeautifulSoup(response.content,'html.parser')

weather_block = soup.find("div", class_="weather")

day_of_week = weather_block.find(text=lambda text: text.strip() == "День недели").text.strip()
date = weather_block.find('a', href=lambda href: href.startswith("/weather/"))['title'].text.strip().split('/')[1]
temp = weather_block.find_all('span', class_='temperature')[0].text.split(' ')[0]

df = pd.DataFrame({
'День недели': [day_of_week],
'Дата': [date],
'Температура': [temp]
})

df.to_csv(r' D:\python\weather.csv')

Выдает следующую ошибку:
day_of_week = weather_block.find(text=lambda text: text.strip() == "День недели").text.strip()
                  ^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'find'

как мне ее исправить?
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
У тебя response.status_code равен 403. То есть html что бы парсить его супом сервер не прислал. Можно добавить ему headers.
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
Теперь сервер пришлет html status_code должен быть 200 (по крайней мере у меня работает). Который можно парсить средствами beatifulsoup. Правильно ли написан парсинг, нет не правильно. Такого класса как ты ищешь там нет. Ну это все самостоятельно, объект сервер пришлет валидный для парсинга.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы