Форум сайта python.su
0
Добрый день!
Это мой первый пост на форуме. :)
Я практикуюсь и пишу прогу, которая бы получала запрос оригинального (англоязычного) названия фильма, искала бы его в базе kinopoisk.ru и выдавала бы русское название фильма как результат.
На данный момент пога выглядит примерно так (извините, есть привычка писать комменты на английском):
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib, urllib2, uu
def kpquery (name):
# Supply search data
data = urllib.urlencode({'first' : 'no', 'kp_query' : name})
request = urllib2.Request('http://www.kinopoisk.ru/index.php?', data)
# Won't work without specifying the 'User-Agent' field here
request.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3')
# Open the link
f = urllib2.urlopen(request)
s = f.read()
f.close()
# Decode from cp1251 to utf-8
return s.decode('cp1251').encode('utf-8')
print kpquery ('Batman')
Отредактировано (Июнь 14, 2010 15:25:47)
Офлайн
0
Странно - вы пользуетесь urllib2, получили страницу и спрашиваете что дальше делать.
Любая работа над строками, которая даст требуемый результат.
Про существующие библиотеки не подскажу, но есть небольшое замечание -
у вас в заголовке указан юзер агент и язык (английский), но страницу вы переводите из cp1251 не зная и не прочитав еще кодировку страницы. Ответ с сайта может прийти в кодировке указанной в заголовках запроса, в том числе и из заголовка юзер-агента. Все от ресурса зависит (от его разработчиков).
Мнение - библиотеки могут не помоч, т.к. страница сайта может содержать невалидный html (xml).
От вас требуется написать валидатор html (xml) и подарить его сообществу :)
Или откопать готовый (серьёзно).
Отредактировано (Июнь 14, 2010 15:20:24)
Офлайн
0
Спрашиваю потому что хочу понять как кошерно это делать…
pionerУже подправил сам (кстати, правильно?), а потом прочитал ваше сообщение. :) Проверял уже, не возвращает он в нормальной кодировке, в отличии от, скажем, яндекса. Вы имеете ввиду ‘Accept-Charset’?
у вас в заголовке указан юзер агент и язык (английский), но страницу вы переводите из cp1251 не зная и не прочитав еще кодировку страницы. Ответ с сайта может прийти в кодировке указанной в заголовках запроса, в том числе и из заголовка юзер-агента. Все от ресурса зависит (от его разработчиков).
Отредактировано (Июнь 14, 2010 15:44:52)
Офлайн
0
“Проверял уже, не возвращает он в нормальной кодировке” -
сегодня не возвращает, завтра будет возвращать.
Изменится верстка - парсер надо будет перенастраивать т.п.
Сам кинопоиск где инфу берет?
Офлайн
0
pioner“Ничто не вечно под солнцем” :)
“Проверял уже, не возвращает он в нормальной кодировке” -
сегодня не возвращает, завтра будет возвращать.
Изменится верстка - парсер надо будет перенастраивать т.п.
pionerМожет это база самого кинопоиска? *неуверенно*
Сам кинопоиск где инфу берет?
Отредактировано (Июнь 14, 2010 20:08:15)
Офлайн
0
Решил искать своими силами. Сейчас скрипт выглядит вот так:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib, urllib2, uu
def kpquery (name):
# Supply search data
data = urllib.urlencode({'first' : 'no', 'kp_query' : name})
request = urllib2.Request('http://www.kinopoisk.ru/index.php?', data)
# Won't work without specifying the 'User-Agent' field here
request.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3')
# Open the link
f = urllib2.urlopen(request)
s = f.read()
f.close()
# Decode from cp1251 to utf-8
return s.decode('cp1251').encode('utf-8')
searchstring = 'Robocop'
s = kpquery (searchstring)
import re
m = re.search('<font color="#999999">'+searchstring+'</font>', s, re.IGNORECASE)
#print m.start()
print m.group()
m = re.search('<a class="all" href=".*</a>, ', s, re.IGNORECASE)
print m.group()
Отредактировано (Июнь 14, 2010 20:32:53)
Офлайн
0
Посетила мысль: при помощи очень хорошего модуля htmldata можно превратить страничку в массив, там отыскать searchstring, а русское название будет скажем searchstring - 2. Завтра попробую.
Офлайн
19
может быть стоит посмотреть на более “умные” средства для работы с html, например html5lib ?
Офлайн
0
Обязательно! Спасибо за совет!!! :)
Офлайн
2
Да, html5lb с lxml древо-построителем. Потом через xpath любые данные можно легко со странички намайнить.
Офлайн