Условие пропуска веб-страницы, где данные недоступны - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь получить данные с сайта http://weather.uwyo.edu/upperair/sounding.html'. Я написал следующий скрипт, но проблема в том, что некоторые станции на данном сайте не имеют никаких данных. Таким образом, он выдает ошибку как «AttributeError: объект NoneType» не имеет атрибута «текст». Я хочу написать некоторое условие, чтобы там, где нет данных, он пропускал эту станцию ​​и переходил к следующей станции.

попробовать: для станции на станции:

    year = '2017'
    month = '08'
    day = '14'
    hour = '00'
    end = '12'

url = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

webbrowser.open ( 'http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

soup = BeautifulSoup(url.text,'html.parser')
data_box = soup.find('pre')
data = data_box.text.strip()
print (data)

кроме AttributeError: print («Нет данных для станции», AttributeError)

import sys
import webbrowser
import urllib3
import requests
import lxml.html as lh
import pandas as pd
from time import sleep
from bs4 import BeautifulSoup
import csv

station =[42647,42101]       # [42101] #,42647,42971,43371]

try:
    for stn in station:

        year = '2017'
        month = '08'
        day = '14'
        hour = '00'
        end = '12'

    url = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

webbrowser.open ( 'http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

  soup = BeautifulSoup(url.text,'html.parser')
  data_box = soup.find('pre')
  data = data_box.text.strip()
 except AttributeError :
        print("No data available for  station", AttributeError)
    print (data)

Я ожидаю, что он должен печатать данные для станций с доступными данными, пропуская станции, где данные недоступны. Но вывод: Нет данных для станции Traceback (последний вызов был последним): Файл "sound.py", строка 30, в data = data_box.text.strip () AttributeError: у объекта 'NoneType' нет атрибута 'text'

1 Ответ

1 голос
/ 25 июня 2019

Вы неправильно обработали исключение; исключение всплывает и перехватывается за пределами для цикла, поэтому цикл for уже завершен в этой точке.

Вам нужно установить try-except, где вы думаете, что исключение может быть вызвано внутри цикла for, то есть выберите наименьшую область действия:

for stn in station:
    ...
    try:
        data = data_box.text.strip()
     except AttributeError :
        print("No data available for  station", AttributeError)
        continue  # move onto next station
...