Парсинг сайта ibash.org.ru
Запись от XoFfiCEr размещена 07.11.2012 в 00:18
Показов 9076
Комментарии 3
Иногда в свободное время хочется почитать что нибудь из (около)компьютерного юмора, например сайт ibash.org,ru. К сожалению у меня на работе нет интернета, а читать с мобильника дорого (ибо GPRS) и неудобно. В итоге я сделал простой скрипт на python который "выдирает" цитаты со всех страниц сайта ibash.org.ry выводит их на экран помещает в текстовый файл.
| |||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
-
Когда-то давно тоже писал граббер для топа баша. Правда, он валился на какой-то странице, но до нее все равно никто не дочитал. Работало до начала прошлого лета. А потом, вроде, на баше что-то поменяли, и просто так мне выдавать страницы с цитатами не захотели. Скорее всего, надо заголовники добавить, но допиливать мне лень.
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Bash.im's top grabbing First param - out file(by default "quotes.txt") Second param - first page(by default "http://bash.im/byrating/1") """ import sys, re, urllib from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup def get_quotes(f, p): max_page = 1 if not re.match(ur"^(http://){0,1}bash.im/byrating/[1-9]\d{0,3}/?$", p): raise ValueError, "Incorrect web link" if "http://" not in p: p = "http://" + p page_num = re.search(ur"\d{1,3}/?", p) p = p.replace(page_num.group(), '') for page in range(int(page_num.group().replace('/', '')), max_page + 1): print "Processed page: ", page soup = BeautifulSoup( urllib.urlopen(p + str(page)).read(), fromEncoding = "utf-8" ) print soup for quote_block in soup.findAll(u"div", {u"class" : u"quote"}): quote = str(quote_block).decode("utf8") quote_text = re.search(ur'<div class="text">.*</div>', quote); if quote_text: text = quote_text.group() text = text.replace(u'<div class="text">', u'') text = text.replace(u"</div>", u'') text = text.replace(u"<br />", u'\n') text = BeautifulStoneSoup(text,convertEntities = \ BeautifulStoneSoup.HTML_ENTITIES).contents[0] #text = text.replace(u"<", u'<') #text = text.replace(u">", u'>') #text = text.replace(u""", u'"') f.write(text.encode("utf8")) f.write(u"\n\n") if __name__ == "__main__": file_name = u"quotes.txt" if len(sys.argv) < 2 else sys.argv[1] page = u"http://bash.im/byrating/1" if len(sys.argv) < 3 else sys.argv[2] try: with open(file_name, 'w') as f: try: get_quotes(f, page) except ValueError: print sys.exc_value except IOError: print u"Incorrect file name" except: print u"Unexpected error:", sys.exc_info()[0]
Запись от soon размещена 07.11.2012 в 22:29
-
Так это bash.im? Я вообще оттуда ничего не смог спарсить получаю 403 Forbidden.Запись от XoFfiCEr размещена 07.11.2012 в 22:42
-
Запись от soon размещена 08.11.2012 в 05:38



