将ttlsa站点文章导入evernote

平时喜欢用印象笔记存资料,所以想到把这个站点的资料导入到印象笔记中。本来打算用ifttt的rss->evernote来实现的,但是ifttt没法导入博客的标签,也没有办法将以前的博客导入。最后自己写了一个python脚本实现了。 windows下的evernote提供了本地api,详情参见 http://dev.yinxiang.com/doc/articles/enscript.php python的lxml模块支持xpath,可以方便的解析html内容,下面说明脚本中几个关键点。 from lxml import html #获取网页源码 lhtml=html.parse('http://www.ttlsa.com/page/1') #获取博客列表 posts=lhtml.xpath('//div[@id="main"]/div[@class="post"]') //是从html的根目录开始查找,div[@id="main"]是查找id属性是main的div标签,div[@class="post"]是查找class属性为post的html。post中存放了文章的摘要。 #获取一篇博客的链接 href=post.xpath('h2/a/@href[.]')[0] [.] 用来获取属性的值,a/@href[.]就是获取超链接标签a的href值,就是博客的链接了。 注:xpath获取到的数据都是存放在数组里面的。 #获取文章内容 contents=post.xpath('div[@class="content"]/*/text()') *匹配所有节点 text()用来获取根点下的文本内容这里只能获取到直接子节点的内容,子节点的子节点就获取不到了 contents存放了文章的段落列表,evernote支持<br/>换行,将将所有段落连接为一个。 l=[] [l.append(cgi.escape(t)) for t in contents] content='<br/>'.join(l) content=content.split('[......]')[0] content+=content+'[......]' cgi.escape()方法是将html的符号编码,因为evernote只支持部分html格式,如果不编码的话可能导致导入evernote失败。 #获取博客标签 tags=post.xpath('div[@class="under"]/span/a[@rel="tag"]/text()')   #导入evernote subprocess.call('ENScript.exe importNotes /n www.ttlsa.com /s '+path) ENScript.exe在evernote的安装目录下,使用前要将安装目录假如环境变量,或者使用绝对路径。 /n 指定笔记本 /s  evernote文件路径 下面贴上完整的源代码 #encoding:utf8 import subprocess from lxml import html import os import cgi enex='''<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export2.dtd"> <en-export export-date="20131219T061541Z" application="Evernote/Windows" version="5.x"> <note><title>{{title}}</title><content><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"> <en-note style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"> {{content}} <div><br/></div><div><a href="{{href}}">{{hreftitle}}</a></div></en-note>]]></content>{{tag}}</note></en-export> ''' def get_latest_blog(index): global num logfile='last.log' lasthref='' #if os.path.exists(logfile) and os.path.isfile(logfile): #    lasthref=open('last.log','r').read() print 'reading index',str(index) href='http://www.ttlsa.com/page/'+str(index) lhtml=html.parse(href) #获取博客列表 posts=lhtml.xpath('//div[@id="main"]/div[@class="post"]') if not posts: return 'exit' #从ttlsa读取博客 for post in posts: href=post.xpath('h2/a/@href[.]')[0] href=cgi.escape(href) #if lasthref==href: #    print 'this is the last href', href #    return posts[0].xpath('h2/a/@href[.]')[0]   #返回最新的href #xpath获取网页数据 title=post.xpath('h2/a/text()')[0] title=cgi.escape(title) contents=post.xpath('div[@class="content"]/*/text()') l=[] [l.append(cgi.escape(t)) for t in contents] content='<br/>'.join(l) content=content.split('[......]')[0] content+=content+'[......]' tags=post.xpath('div[@class="under"]/span/a[@rel="tag"]/text()') #format enex note=enex.replace('{{title}}',title.encode('utf8')) note=note.replace('{{hreftitle}}',href.encode('utf8')) note=note.replace('{{href}}',href.encode('utf8')) note=note.replace('{{content}}',content.encode('utf8')) enex_tag='' for tag in tags: enex_tag+='<tag>%s</tag>'%(tag) note=note.replace('{{tag}}',enex_tag.encode('utf8')) print title #print href #print 'tag:',tags #保存到本地 path='blog\\'+href.split('/')[-1] file1=open(path,'w') file1.write(note) file1.close() #导入evernote ret=subprocess.call('ENScript.exe importNotes /n www.ttlsa.com_2 /s '+path) if ret ==0: num+=1 print 'num:',num if ret != 0: open('err.log','a').write(href.encode('utf8')+'\r\n') print '-----' return 'next' #==========begin============# num=0   #正确写入evernote的数量 page_num=32 #ttlsa博客的页数 page_num=page_num+1 for index in range(1,page_num): index=page_num-index res=get_latest_blog(index) if res=='next': continue elif res=='exit':   #没有读到网页 break else: open('last.log','w').write(res) break

你可能感兴趣的:(将ttlsa站点文章导入evernote)