Форум сайта python.su
Здравствуйте, возникла нужда вытащить информацию из таблицы справа от карты на этом сайте (http://transport.orgp.spb.ru/Portal/transport/stop/24443 ). Я пытаюсь это сделать, но ни как не получается.
Пробовал таким образом, но не получилось. Буду очень признателен , если поможете.
from urllib.request import urlopen from urllib.parse import urljoin from lxml.html import fromstring URL = 'http://transport.orgp.spb.ru/Portal/transport/stop/24443' ITEM_PATH = '.display autoheight' def parse_courses(): f = urlopen(URL) list_html = f.read().decode('utf-8') list_doc = fromstring(list_html) for elem in list_doc.cssselect(ITEM_PATH): print(elem) a = elem.cssselect('tr')[0] name = a.text def main(): parse_courses() if __name__ == '__main__': main()
Отредактировано SmileWithSmile (Май 3, 2015 00:54:25)
Офлайн
Не работает, потому что там не всё так просто. Там эта таблица отдельно через AJAX запрос подгружается.
Вот такой код будет работать:
import urllib2 import json from urllib import urlencode url = 'http://transport.orgp.spb.ru/Portal/transport/stop/24443/arriving' user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' data = { 'sEcho':'1', 'iColumns':'5', 'sColumns':'index,routeNumber,timeToArrive,parkNumber,wheelchair', 'iDisplayStart':'0', 'iDisplayLength':'-1', 'sNames':'index,routeNumber,timeToArrive,parkNumber,wheelchair' } headers = {'X-Requested-With':'XMLHttpRequest','User-Agent':user_agent} req = urllib2.Request(url, urlencode(data), headers) response = urllib2.urlopen(req) result = json.loads(response.read()) for i, line in enumerate(result['aaData']): index, route, time, parknumber, wheelchair = line if wheelchair: wheelchair = "+" else: wheelchair = " " out = '#: %s | Route: %s | TimeToArrive: %s min | ParkNumber: %s | Wheelchair: %s' % (i, route, time, parknumber, wheelchair) print out
Офлайн
givebackЯ правильно понял, что этот код для python 2.x
Не работает, потому что там не всё так просто. Там эта таблица отдельно через AJAX запрос подгружается.Вот такой код будет работать:
Офлайн
Да, писал для 2.х. Вот сделал для 3ей, но не проверял:
import urllib.request, urllib.error import json from urllib.parse import urlencode url = 'http://transport.orgp.spb.ru/Portal/transport/stop/24443/arriving' user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36' data = { 'sEcho':'1', 'iColumns':'5', 'sColumns':'index,routeNumber,timeToArrive,parkNumber,wheelchair', 'iDisplayStart':'0', 'iDisplayLength':'-1', 'sNames':'index,routeNumber,timeToArrive,parkNumber,wheelchair' } headers = {'X-Requested-With':'XMLHttpRequest','User-Agent':user_agent} req = urllib.request.Request(url, urlencode(data), headers) response = urllib.request.urlopen(req) result = json.loads(response.read()) for i, line in enumerate(result['aaData']): index, route, time, parknumber, wheelchair = line if wheelchair: wheelchair = "+" else: wheelchair = " " out = '#: %s | Route: %s | TimeToArrive: %s min | ParkNumber: %s | Wheelchair: %s' % (i, route, time, parknumber, wheelchair) print(out)
Отредактировано giveback (Май 3, 2015 22:05:23)
Офлайн
givebackTraceback (most recent call last):
Да, писал для 2.х. Вот сделал для 3ей, но не проверял:
Офлайн
Спасибо огромное, установил старый питон и все заработало, мучался до этого кучу времени, + реп
Офлайн
Чтобы заработало для 3ей версии похоже нужно вместо
req = urllib.request.Request(url, urlencode(data), headers)
req = urllib.request.Request(url, urlencode(data).encode('utf-8'), headers)
Офлайн
givebackTraceback (most recent call last):
Чтобы заработало для 3ей версии похоже нужно вместо
Офлайн
А вместо
result = json.loads(response.read())
result = json.loads(response.read().decode('utf-8'))
Офлайн
givebackТы лучший. Знай это
А вместо
Офлайн