LINUX.ORG.RU

[Python] поиск строки в переменной

 


0

1

Здравствуйте, мне нужна помощь в решении задачи на питоне. Задача такая: я дергаю с помощью urllib2 содержимое html странички и кладу в переменную. Далее, хочу выдернуть комментарий пользователя с той html странички, которая у меня теперь лежит в переменной. Он находится между тегов <span> </span>, я это указал в коде. Но вываливается syntax error.

Вот мой код:

#!/usr/bin/python
# -*- coding: cp1251 -*-

import urllib2
request = 'http://maps.google.ru/maps/place?cid=7510474565088668412&q=якитория, щелк...
response = urllib2.urlopen(request)
htmlcontent = response.read()

comment = htmlcontent[htmlcontent.find(«readonly-first-n»+2:htmlcontent.find(«<»)]

print comment

Пробовал другой код, где переменная строковая

myString = 'Hello there madcap !'
mySubString = myString[myString.find(«there»)+5:myString.find("!")]
print mySubString

Тут всё работает. Как мне быть ? Как мне работать с содержимым переменной htmlcontent ?



Последнее исправление: madcap (всего исправлений: 1)

Не извращайся, возьми beautifulsoup!

А синтакс эррор у тебя из-за незакрытой круглой скобки.

provaton ★★★★★
()

Ошибка syntax error свидетельствует лишь о неправильно написанном коде. Если этот код полный, то погляди на строку, которую ты посылаешь в переменную request - она не закрыта. Ты в блокноте что ли писал ? )) Даже в nano есть подсветка синтаксиса, где бы ты все это увидел, не говоря уже об IDLE, gedit, vi, emacs и т.д. Во втором случае работает, потому что не ошибся. Вопрос «как работать с содержимым переменной» неправильный, тебе нужно знать, как работать с классом, объектом которого она является. Это здесь - http://docs.python.org/library/urllib.html?#module-urllib

И будь внимательее, ошибка очень глупая.

markontheboard
()
Ответ на: комментарий от provaton

Скобку добавил, теперь пишет ошибки нет, но ничего не выводит

До этого в эклипсе работал, после смены винды не успел еще поставить. А писал не в блокноте, в фаре )))

madcap
() автор топика
Ответ на: комментарий от madcap

Не очень понятно, что ты имеешь ввиду в том коде, что прислал, потому что незачем брать строку в кавычки, если внутри не выполняется операций над ней, видимо еще забыл первую квадратную скобку.

comment = htmlcontent [ htmlcontent.find ( «readonly-first-n» ) + 2 : htmlcontent.find(«<») ] Так вроде правильно. Ошибки в самой программе ищи сам, это не govnokod.ru.

И посмотри хорошенько в адресную строку - там LINUX.org. Ты же зарегистрировался здесь , чтобы спросить про задачку на python. Выходит как про kde2 под freebsd.

markontheboard
()
Ответ на: комментарий от markontheboard

В девелоперской ветке вроде и про пхп спрашивают, иначе зачем она ? Когда гуглил гугл часто попадал на данную ветку форума, а именно топики с обсуждение вопросов, связанных с питоном. Спасибо за гостеприимство, кстати. Однако, стоит заметить на том же python.su мне так никто и не ответил, так что оперативненько. Еще раз спасибо.

madcap
() автор топика
Ответ на: комментарий от madcap

Конечно ничего не выводит, потому что в хтмл первый символ '<' точно встречается раньше чем 'readonly-first-n'.

Ты удаляешь гланды через задницу, возьми библиотеку http://www.crummy.com/software/BeautifulSoup/, с ее помощью найди нужный тебе спан и выведи его содержимое.

provaton ★★★★★
()
Ответ на: комментарий от markontheboard

кстати про квадратную скобку ниче не забыл, все на месте, а если это был сарказм, то извиняюсь, 2:28 ночи, а питоном страдаю с полудня

madcap
() автор топика
Ответ на: комментарий от madcap

Нет, сарказма не было. Да, правильно говорят тебе - символ '<' просто встречается раньше. Лучше либо включить больше символов в критерий поиска, либо циклом пройтись по странице и слить весь результат поиска в список - так виднее будет, где ошибка. И действительно, не изобретай велосипед - воспользуйся супом.

2:28 ночи, а питоном страдаю с полудня

Я сам недавно с 8 вечера до 7 утра сидел над проектом.

markontheboard
()
Ответ на: комментарий от markontheboard

Кстати, не подскажете где взять для Cygwin'овского питона замечательноемыло

madcap
() автор топика
Ответ на: комментарий от provaton

#!/usr/bin/python
# -*- coding: cp1251 -*-

from BeautifulSoup import BeautifulSoup
import urllib2
request = 'http://maps.google.ru/maps/place?cid=7510474565088668412&q=якитория, щелк...
response = urllib2.urlopen(request)
htmlcontent = response.read()
soup = BeautifulSoup(htmlcontent)

soup.prettify()

TitleComment = soup.findAll(«span», «title comment-box-readonly-first-n»)
Comments = soup.findAll(«span», «snippet»)

print TitleComment
print Comments

Вот такой вот код. В хроме смотрел код элемента на страничке исходной, как раз комментарии о якитории. Там делятся они на заголовок коммента (span с классом «title comment-box-readonly-first-n») и сам текст комментария (span с классом «snippet»)

Теперь у меня в двух переменнах заголовки отдельно и комментарии. Но findAll сохраняет и сами теги, так что print также их выводит.

Мне необходимо убрать теги и склеить заголовки с комментариями. Не подадите идейку ?

madcap
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.