@roma79737

Почему парсер выдает ошибку, если вводить место погоды с другого файла?

Есть два файла.

bot.py
from weather import w          #импортируем функцию из файла weather
location = input()                   #вводим нужное место
x = w()                                   #запускаем пасрер
print(x)                                  #выводим данные


weather.py
import requests
from bs4 import BeautifulSoup
from bot import location             #импорт введенного местоположения

def w():
    url = 'https://www.google.com/search?client=opera&ei=3zEQX663Msu5kwWh4ZGICA&q=погода+' + location + '&oq=погода+' + location + '&gs_lcp=CgZwc3ktYWIQAzINCAAQsQMQgwEQRhCAAjICCAAyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADoECAAQRzoKCAAQsQMQgwEQQzoECAAQQzoPCAAQsQMQgwEQQxBGEIACOggIABCxAxCDAToJCAAQQxBGEIACOgUIABCxA1CW1g9YseoPYIvuD2gAcAF4AIAB3AGIAc8KkgEFMy41LjKYAQCgAQGqAQdnd3Mtd2l6&sclient=psy-ab&ved=0ahUKEwjuopbozdHqAhXL3KQKHaFwBIEQ4dUDCAs&uact=5'     #ссылка для парсинга
    headers = {'User-Agent': '#user agent'}

    source = requests.get(url, headers=headers)
    main_text = source.text
    soup = BeautifulSoup(main_text, 'html.parser')

    div = soup.find('div', {'id' : 'wob_d'})
    temperature = div.find('span', {'id' : 'wob_ttm'})
    div1 = soup.find('div', {'id' : 'wob_dcp'})
    condition = div1.find('span', {'class' : 'vk_gy vk_sh'})
    weather = "В " + location + " " + temperature.text + "°F" + ", " + condition.text
    return weather                     #возврат полученных данных


Выдает ошибку сразу же после запуска. (хотя перед запуском ошибок нет)
ImportError: cannot import name 'w'

Как можно решить проблему? Всем заранее спасибо за ответ.
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
@roma79737 Автор вопроса
Скорей всего данные не успевают загрузится в другой файл, из-за чего вылетает ошибка.

Написал все в одном файле. Чтобы сохранить "конструкцию" сделал так:

import requests
from bs4 import BeautifulSoup

location = input()

def w():
    url = 'https://www.google.com/search?q=погода+в+' + location
    headers = {'User-Agent': '#user agent'}

    source = requests.get(url, headers=headers)
    main_text = source.text
    soup = BeautifulSoup(main_text, 'html.parser')

    div = soup.find('div', {'id' : 'wob_d'})
    temperature = div.find('span', {'id' : 'wob_tm'})
    div1 = soup.find('div', {'id' : 'wob_dcp'})
    condition = div1.find('span', {'class' : 'vk_gy vk_sh'})
    weather = "В " + location + " " + temperature.text + "°C" + ", " + condition.text
    return weather

weather = w()

print(weather)


Код написал для бота ВК (vk.messages.send(...message=weather)). По этому я не писал print в функции, после чего ее вызов
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
OnederX Москва
от 100 000 до 120 000 ₽
NatsON Москва
от 220 000 до 350 000 ₽
SwapZilla.co Москва
от 200 000 ₽
15 авг. 2020, в 03:40
1000 руб./в час
15 авг. 2020, в 01:45
95000 руб./за проект
14 авг. 2020, в 22:47
15000 руб./за проект