Вот отрывок из моего кода, в котором как раз проблема.
Проблема в том, что количество информации по каждому фильму разное и как следствие 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(', ')