Created
January 10, 2014 19:32
-
-
Save icoz/8360969 to your computer and use it in GitHub Desktop.
modifications for fav2pdf.py
Изменения:
1) содается папка pdf с подпапками posts и hubs
2) при парсинге страницы выдираются и комментарии, потом они сохраняются в топике
3) в posts сохраняются посты по имени id.pdf
4) в hubs создаются подпапки с названиями хабов, которые упоминаются в топиках
5) в тех подпапках хабов создаются символические ссыл…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- a/fav2pdf.py | |
+++ b/fav2pdf.py | |
@@ -1,6 +1,7 @@ | |
# -*- coding: utf-8 -*- | |
import re | |
+import os | |
import sys | |
from pdf_gen import * | |
from datetime import date, timedelta, datetime | |
@@ -11,18 +12,27 @@ import lxml.html | |
user = 'JazzCore' | |
site = "habrahabr.ru/users/%s" % user | |
-from_date = u'' # 5 августа 2009 | |
-to_date = u'' # 30 ноября 2010 | |
-blog_m = [] #[u'Android', u'Mobile Development'] только перечисленные блоги. Должны быть юникодные, не забывать 'u' перед строкой. Звездочки писать не надо. | |
+from_date = u'' # 5 августа 2009 | |
+to_date = u'' # 30 ноября 2010 | |
+#[u'Android', u'Mobile Development'] только перечисленные блоги. Должны быть юникодные, не забывать 'u' перед строкой. Звездочки писать не надо. | |
+blog_m = [] | |
topic_per_page = 10 | |
-month = [u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня', u'июля', u'августа', u'сентября', u'октября', | |
- u'ноября', | |
- u'декабря'] | |
+month = [ | |
+ u'января', u'февраля', u'марта', u'апреля', u'мая', u'июня', u'июля', u'августа', u'сентября', u'октября', | |
+ u'ноября', | |
+ u'декабря'] | |
dr = requests.get('http://' + site + '/favorites/').text | |
+if not os.path.exists('pdf`'): | |
+ os.mkdir('pdf') | |
+if not os.path.exists('pdf/posts'): | |
+ os.mkdir('pdf/posts') | |
+if not os.path.exists('pdf/hubs'): | |
+ os.mkdir('pdf/hubs') | |
try: | |
+ | |
doc = lxml.html.document_fromstring(dr) | |
profilepage = requests.get('http://' + site).text | |
@@ -31,14 +41,16 @@ try: | |
count = int(doc.xpath('.//td/a/span/span/text()')[0]) | |
else: | |
count = int(doc.xpath('.//div/a/span/span/text()')[0]) | |
- # Read-only accounts have different page layout, so it needs different handling | |
+ # Read-only accounts have different page layout, so it needs different | |
+ # handling | |
except: | |
print 'No favorites found. Most likely its a typo in username' | |
sys.exit(1) | |
page = count / topic_per_page + 1 | |
-data_finder = doc.xpath('.//div[@class="posts shortcuts_items"]/div/div[1]/text()') | |
+data_finder = doc.xpath( | |
+ './/div[@class="posts shortcuts_items"]/div/div[1]/text()') | |
if (to_date != ''): | |
td = to_date.split(' ') | |
@@ -65,15 +77,16 @@ for p in range(1, page + 1): | |
print '\nProcessed page %s of %s:' % (p, page) | |
dr = requests.get('http://%s/favorites/page%s/' % (site, p)).text | |
- #get posts | |
+ # get posts | |
doc = lxml.html.fromstring(dr) | |
elems = doc.xpath('.//div[@class="posts shortcuts_items"]/div') | |
- #get hubs from posts | |
+ # get hubs from posts | |
hubs = [x.xpath('.//div[@class="hubs"]/a/text()') for x in elems] | |
postLinks = doc.xpath('.//h1[@class="title"]/a[1]') | |
- postDates = doc.xpath('.//div[@class="posts shortcuts_items"]/div/div[1]/text()') | |
+ postDates = doc.xpath( | |
+ './/div[@class="posts shortcuts_items"]/div/div[1]/text()') | |
for dd in postDates: | |
in_date += 1 | |
@@ -85,9 +98,11 @@ for p in range(1, page + 1): | |
d = date.today() | |
else: | |
if re.search('20[0-9]{2}', dd): | |
- d = date(int(parts[2]), month.index(parts[1]) + 1, int(parts[0])) | |
+ d = date(int(parts[2]), month.index( | |
+ parts[1]) + 1, int(parts[0])) | |
else: | |
- d = date(datetime.now().year, month.index(parts[1]) + 1, int(parts[0])) | |
+ d = date(datetime.now().year, month.index( | |
+ parts[1]) + 1, int(parts[0])) | |
if from_date_dt <= d <= to_date_dt: | |
topic_m.append(in_date) | |
@@ -96,7 +111,7 @@ for p in range(1, page + 1): | |
for index, a in enumerate(postLinks): | |
topicCount += 1 | |
- #here we will get /post/ID/ part of the link | |
+ # here we will get /post/ID/ part of the link | |
# check for company/link posts | |
url = a.get('href') | |
if 'company' in url: | |
@@ -105,6 +120,9 @@ for p in range(1, page + 1): | |
token = url.split('linker/')[1].replace('go', 'post') | |
else: | |
token = a.get('href').split('ru/')[1] | |
+ id = token.split('post/')[1] | |
+ if id[-1] == "/": | |
+ id = id[:-1] | |
m_link = u'http://m.habrahabr.ru/%s' % token | |
@@ -125,25 +143,33 @@ for p in range(1, page + 1): | |
topic_res = td[t_start:t_stop] | |
autor = re.findall('<div class="m">\n\t\t\t\n\t\t\t(.*),', topic_res)[0] | |
topic_res = re.sub('<div class="m">\n\t\t\t\n\t\t\t(.*),', | |
- '<div class="m"><a href="http://%s.habrahabr.ru">%s</a>,' % (autor, autor), topic_res) | |
+ '<div class="m"><a href="http://%s.habrahabr.ru">%s</a>,' % (autor, autor), topic_res) | |
topic_res = re.sub('\s<br/>\s*\S*<br/>', '<br/>', topic_res) | |
topic_res = topic_res.replace('align="left"/>', '/>') | |
topic_res = topic_res.replace('align="center"', 'align="middle"') | |
topic_res = re.sub('/>\s*<img', '/><br/><img', topic_res) | |
- topic = topic + u'<div><pdf:nextpage /></div><h2><a name="%d">[%s] </a><a href="%s">%s</a></h2><br><br>' % ( | |
- topicCount, u', '.join(hubs[index]), url, a.text) + topic_res | |
+ cmts_start = td.find('<div class="cmts">') | |
+ cmts_stop = td.find('<div class="bm">') | |
+ cmts_res = td[cmts_start:cmts_stop] | |
+ topic = u'<h2><a name="%d">[%s] </a><br><a href="%s">%s</a></h2><br><br>' % (topicCount, u', '.join(hubs[index]), url, a.text) + topic_res + cmts_res | |
+ go(topic, 'pdf/posts/' + id + '.pdf') | |
+ # create symlinks | |
+ for hub in hubs[index]: | |
+ if not os.path.exists('pdf/hubs/' + hub): | |
+ os.mkdir('pdf/hubs/' + hub) | |
+ os.symlink( | |
+ '../../posts/' + id + '.pdf', 'pdf/hubs/' + hub +"/" + id + '.pdf') | |
except: | |
print ' Topic: %s->%s is locked!' % (', '.join(hubs[index]), a.text) | |
print '----------------------' | |
-content += topic | |
- | |
+ # content += topic | |
#f = open('1.html', 'w') | |
-#f.write(topic) | |
-#f.close() | |
+# f.write(topic) | |
+# f.close() | |
-go(content, user + '.pdf') | |
+# go(content, user + '.pdf') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment