Форум сайта python.su
Помогите пожалуйста, не могу разобраться как мне распарсить страницу http://www.kinopoisk.ru/film/19287/.
Нужно вытащить из таблицы некоторые значения. На пример, получить год выхода фильма, его жанр и т д.
Проблема в том, что количество информации для каждого фильма разное и я по этому не знаю как вытащить нужные мне данные.
Отредактировано duekf6o+p62izk (Дек. 30, 2013 00:09:26)
Офлайн
Можете задать искомый параметр, найти его в class=“type” и соответствующий ему href.text. профит.)
Офлайн
Не совсем понял, что ты предлагаешь. опиши подробней пожалуйста.
Просто если все правильно понял, то значит ты не совсем понял о чем я говорю, не все так просто.
Отредактировано duekf6o+p62izk (Дек. 30, 2013 10:57:40)
Офлайн
Вообщем так как я написал выше у меня у самого не получилось (тороплюсь, некогда разбираться), и я сделал по тупому:
# -*- coding: UTF-8 -*- from grab import Grab num=0 usl=[u"год",u"страна",u"жанр"] g=Grab() g.go("http://www.kinopoisk.ru/film/19287/") dart=g.doc.select("body").text().split(" ") for sel in list(dart): if num==1: print sel num=0 for loop in list(usl): if sel==loop: usl.remove(loop) num+=1
Офлайн
Твой код частично работает. Возвращает только год и страну, а жанр не возвращает.
Кстати, если взять ссылку на фильм который снимался в нескольких странах то выплывет ещё одна проблема, что выводится только 1 страна.
Отредактировано duekf6o+p62izk (Дек. 30, 2013 11:15:28)
Офлайн
У меня просто была проблема сначала, что css селектор нужный разный использовать для доступа к каждому элементу, я её решил, и потом встретился с проблемой, что пунктов в таблице всегда разное количество и по этому мой код иногда выдаёт ошибки.
Офлайн
Странно у меня жанр выводит… Вы кстати можете выложить свой код чтобы более опытные форумчане могли чтолибо подсказать
Офлайн
Вот отрывок из моего кода, в котором как раз проблема.
Проблема в том, что количество информации по каждому фильму разное и как следствие css селекторы не всегда ссылаются в нужное место таблицы и из-за этого проблемы.
Помогите разработать более универсальный способ парсинга страницы кинопоиска.
import lxml.html import requests film_info = {} headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0'} page = requests.get('http://www.kinopoisk.ru/level/1/film/40775/sr/1/', headers=headers) doc = lxml.html.document_fromstring(page.text) data = {'год': '.info tr:nth-child(1) td a', 'страна': '.info tr:nth-child(2) td a', 'жанр': '.info tr:nth-child(11) td a', 'время': 'td#runtime', 'описание': 'table tr:nth-child(1) span div.brand_words', 'название': 'div#headerFilm h1.moviename-big', 'оригинальное название': 'div#headerFilm span'} for key in data.keys(): for element in doc.cssselect(data[key]): if key != 'описание': try: film_info[key] = film_info.setdefault(key, '') + element.text + ', ' except TypeError: film_info[key] = film_info.setdefault(key, '') + '' + ', ' else: film_info[key] = element.text_content() film_info[key] = film_info[key].rstrip(', ')
Офлайн
Прошу:
# -*- coding: UTF-8 -*- from grab import Grab num=0 nu=0 usl=[u"год",u"страна",u"жанр"] g=Grab() g.go("http://www.kinopoisk.ru/film/319/") print g.doc.select("//title").text() for ser in g.doc.select("//td"): if nu==1: print ser.text() nu=0 for loop in list(usl): if ser.text()==loop: usl.remove(loop) nu+=1
Отредактировано noob_saibot (Дек. 31, 2013 08:42:03)
Офлайн
Да работает, спасибо)
А я вот свой велосипед допилил и теперь я решил свою проблему)
Отредактировано duekf6o+p62izk (Дек. 31, 2013 10:43:15)
Офлайн