博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将ttlsa站点文章导入evernote
阅读量:6120 次
发布时间:2019-06-21

本文共 3786 字,大约阅读时间需要 12 分钟。

  hot3.png

平时喜欢用印象笔记存资料,所以想到把这个站点的资料导入到印象笔记中。本来打算用ifttt的rss->evernote来实现的,但是ifttt没法导入博客的标签,也没有办法将以前的博客导入。最后自己写了一个python脚本实现了。 windows下的evernote提供了本地api,详情参见 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

转载于:https://my.oschina.net/766/blog/211154

你可能感兴趣的文章
C#如何在DataGridViewCell中自定义脚本编辑器
查看>>
【linux】crontab定时命令
查看>>
Android UI优化——include、merge 、ViewStub
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Android Annotation扫盲笔记
查看>>
React 整洁代码最佳实践
查看>>
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
移动端架构的几点思考
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>