用proxomitron配合curl下载制作电子书

普遍适用的规则分享、讨论

Moderator: phoenix

Post Reply
Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

用proxomitron配合curl下载制作电子书

Post by Ray4 » Jun 13 2008, 12:21

先说明一下,下载制作电子书的工具有很多,方法也有很多,这里只是在某些特殊情况下,比较适合我自己的。我很少看电子书,正则看过一点,不过不常用,手生得很。这几天闲来无聊,有兴趣看看书,没发现哪里有现成的TXT版的下载,好在有NBTIE这个站,方便是方便了,可发现有时翻页时等待的时间太长,就想把书下下来看,复制粘贴肯定是不行的,劳动量大,太机械,太没成就感了。想到用curl和sed配合,可sed的正规又要现学,况且还要有一定的功力才能达到理想的效果。所以只能找适合我自己的办法,proxomitron的正规我算是较常用,而且它是针对HTML的,使用起来较普通的正规有优势,用它作代理,curl来下载即可很方便地完成任务:

以此文为例:http://www.nbtie.com/retie/wodezhiyelao ... 14_11.html
看几篇文章的源代码,以决定proxomitron的规则:

Code: Select all

[Patterns]
Name = "eBook"
Active = TRUE
Limit = 32767
Match = "*<div class=tianya>*</div>|<SPAN id=nb_tt></SPAN>  </div>  <div id="adl7">*|$NEST(<a*,</a>)|$NEST(<font*,</font>)|<[^>]++>"
Limit要设得大一些,因为是全文过滤嘛。

注意,这里没有用变量\1支持把文章主体提取出来是因为最近在使用这些变量的时候发现当字符数超过一定的范围,变量就不管用了(具体的字符数我没在帮助里看到)

再在命令行下

Code: Select all

curl http://www.nbtie.com/retie/wodezhi
yelaoqianshengya/wodelaoqianshengya814_[12-66:1].html>c:\1.txt -x 127.0.0.1:8081
-x是用来指定代理服务器地址(这里提醒一下,最好用proxomitron多开补丁,以另一个prox做这个工作,不会在使用过程中影响正常的浏览)

下载完后,基本不需要的东西都过滤干净了,剩下一些小的地方不太满意的话,只要简单的用排版工具就可以搞定了

附上curl的介绍:
curl是一个利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等,功能十分强大。Windows操作系统下的网络蚂蚁,网际快车(FlashGet)的功能它都可以做到。准确的说,curl支持文件的上传和下载,所以是一个综合传输工具,但是按照传统,用户习惯称curl为下载工具。curl是瑞典curl组织开发的,您可以访问http://curl.haxx.se/获取它的源代码和相关说明。

User avatar
phoenix
Site Admin
Posts: 525
Joined: Dec 29 2007, 16:27

Re: 用proxomitron配合curl下载制作电子书

Post by phoenix » Jun 13 2008, 13:56

Code: Select all

*<div class=tianya>*</div>
如果不使用bounds match,匹配表达式应尽量避免以*开始,否则会严重影响效率。你试试在*前加个<!DOC,然后在Test Window里比较下速度。

Prox里的*类似于正则里的.*?,关于效率的问题,你有兴趣的话可参考下正则里关于backtracking的解释。

Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

Re: 用proxomitron配合curl下载制作电子书

Post by Ray4 » Jun 13 2008, 18:12

phoenix wrote:

Code: Select all

*<div class=tianya>*</div>
如果不使用bounds match,匹配表达式应尽量避免以*开始,否则会严重影响效率。你试试在*前加个<!DOC,然后在Test Window里比较下速度。

Prox里的*类似于正则里的.*?,关于效率的问题,你有兴趣的话可参考下正则里关于backtracking的解释。

这里有必要补充一下,这个仅仅是个例子,不要局限于此。在这里我并没有考虑效率的问题,因为在这里,主要是用到了proxomitron的正则不用为了临时的目的增加学习时间和成本,毕竟远水解不了近渴嘛 :P

要提取的部分是在

Code: Select all

<div class=tianya>*</div>(要匹配的部分)<SPAN id=nb_tt></SPAN>  </div>  <div id="adl7">
这部分的字符范围过大,无法以变量\1提取出来,只好采取去头去尾的方式进行,去尾的可以用\k来解决,但去除前面的就没想到好方法来匹配,只好用*代替,而且为了匹配整个HTML文档,limit也是设的最大。另外也提醒了大家,再开一个实例以避免无意之中因为此特殊的规则影响了正常浏览。所以效率在这里不是我主要考虑的,利用proxomitron的正则才是我真正的目的,正常的过滤当然要看重效率啰,呵呵

foleo
Posts: 12
Joined: Jun 04 2008, 21:38

Re: 用proxomitron配合curl下载制作电子书

Post by foleo » Jun 17 2008, 14:31

curl这条命令下载 会在每段文件开头加上相应的--_curl_-- url字符
翻了curl帮助 没看到哪里可以设置去除

Ray4
Moderator
Posts: 65
Joined: Dec 30 2007, 09:37

Re: 用proxomitron配合curl下载制作电子书

Post by Ray4 » Jun 17 2008, 17:15

foleo wrote:curl这条命令下载 会在每段文件开头加上相应的--_curl_-- url字符
翻了curl帮助 没看到哪里可以设置去除
我也没看到相关的参数,不过这个问题很好解决的,对于此文中的例子,可以直接用批处理解决。另外很多文本编辑的软件都可以做到,最好后期还是稍微排一下版,这样阅读起来也比较舒服。

Post Reply