Найти - Пользователи
Полная версия: Не работает парсер
Начало » Центр помощи » Не работает парсер
1 2 3 4
py.user.next
Tenebras
в некоторых из nodes отсутствует некая информация и программа прерывается. Как это обойти?
Можно проверять через is None.
Tenebras
Он выдаёт AttributeError.
Возможно как-то обрабатывать AttributeError?
is None сейчас попробую

Благодарю!
Tenebras
Новая загвоздка. У меня в блоке встречается не редко по две-три строки <sky_condition … >
Обрабатывается только одна. Не пойму - как тут грамотно прикрутить цикл, что бы обрабатывало все строки.

 #!/usr/bin/env python
# coding:utf8
from lxml import etree
import urllib
url = 'https://aviationweather.gov/adds/dataserver_current/current/metars.cache.xml'
urllib.urlretrieve(url, filename='metar.xml')
tree = etree.parse('metar.xml') # Парсинг файла
block = tree.xpath('/response/data/METAR')
for bl in block:
	ikao = bl.find('station_id').text
	
	clouds = bl.find('sky_condition')
	if clouds is None:
		continue
		
	cloud = clouds.get('sky_cover')
	print ikao, cloud
	
	
Romissevd
Не оно?
 clouds = bl.findall('sky_condition')
    if clouds is None:
        continue
    for c in clouds:
        cloud = c.get('sky_cover')
        print ikao, cloud
vic57
 #...
for bl in block:
    ikao = bl.find('station_id').text
    clouds = bl.findall('sky_condition')
    out = []
    for i in clouds:
        out.append(i.get('sky_cover'))
    print ikao,' '.join(out)        
Tenebras
Уважаемый vic57, объясните мне, пожалуйста назначение

  ,' '.join(out)  

Что это и откуда оно берётся.

Спасибо большое!!!
vic57
 >>> l =['qwe','asd','dfg']
>>> l
['qwe', 'asd', 'dfg']
>>> ' '.join(l)
'qwe asd dfg'
>>> ':'.join(l)
'qwe:asd:dfg'
>>> 
можешь проще
  #...
for bl in block:
    ikao = bl.find('station_id').text
    clouds = bl.findall('sky_condition')
    out = ''
    for i in clouds:
        out += i.get('sky_cover')+ ' '
    print ikao,out
Tenebras


Кажется первый вариант более простой)))
Tenebras
Не хочу ради такого простого вопроса создавать новую тему. Тем более оно имеет отношение к этой.
Я из xml беру время. Как мне его грамотно разбить?
Я делаю так:

 #...
time = '2017-02-28T20:55:00Z'
tim = time.split(r'T')
ti = tim[1].split(r':')
t = ti[0]+':'+ti[1]
print t  

>>> 20:55

Вопрос в громоздкости. Можно ли как-то укротить? Я разбивал в два этапа. Сперва по Т, потом по :
Можно это сделать одной строкой?

И прибавлю ещё один вопрос:

 #
a = 1.00
b = 0.75
c = 0.00
x = [a,b,c]
print min(x)

Как получить на выходе

>>> 0.00

У меня, понятное дело, выводит 0.0
Romissevd
Можно через регулярные выражения, но не факт что быстрее. Надо проверить на скорость.
 import re
t = '2017-02-28T20:55:00Z'
print(re.findall(re.compile(r'(\d{1,2}:\d{1,2})'), t))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB