Форум сайта python.su
0
Здравствуйте, возникла нужда вытащить информацию из таблицы справа от карты на этом сайте (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)
Офлайн
6
Не работает, потому что там не всё так просто. Там эта таблица отдельно через 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
Офлайн
0
givebackЯ правильно понял, что этот код для python 2.x
Не работает, потому что там не всё так просто. Там эта таблица отдельно через AJAX запрос подгружается.Вот такой код будет работать:
Офлайн
6
Да, писал для 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)
Офлайн
0
givebackTraceback (most recent call last):
Да, писал для 2.х. Вот сделал для 3ей, но не проверял:
Офлайн
0
Спасибо огромное, установил старый питон и все заработало, мучался до этого кучу времени, + реп
Офлайн
6
Чтобы заработало для 3ей версии похоже нужно вместо
req = urllib.request.Request(url, urlencode(data), headers)
req = urllib.request.Request(url, urlencode(data).encode('utf-8'), headers)
Офлайн
0
givebackTraceback (most recent call last):
Чтобы заработало для 3ей версии похоже нужно вместо
Офлайн
6
А вместо
result = json.loads(response.read())
result = json.loads(response.read().decode('utf-8'))
Офлайн
0
givebackТы лучший. Знай это
А вместо
Офлайн