Google App Engine 上架设一个最新小说搜素网站(一)

我很喜欢看小说,但却不愿意去付费看!因此我往往都去非原创的网站浏览小说!我要写的是技术博客,所以大家就不要对我的道德做评论了!

 

需求已经有了:

 

获取小说的最新章节!


现在提出解决办法:

1.频繁扫描那些非著名小说网站。

2.找出章节列表。

3.提取出章节名称和链接。

4.按时间倒序展示给客户端。

5.点击链接可以看到对应的章节。

程序运行环境:

  Google提供的GAE平台。开发语言为 Python (2.5)

 

程序运行的地址为 : 最新小说:http://www.zxxsbook.com 

 

现已经做成的例子,尽管扫描章节的模块我已经重构了8遍,但是我仍然在继续优化!在这个过程中不但程序的效率提高了很多,我也学到了很多!

现在与各位朋友一起分享一下这个过程!同时共同寻求更加优秀的解决方案!

 

第一个版本:

我通过gae的UrlFetch api 进行获取小说网站的首页! 由于最开始的时候,使用的是HTMLParser模块解析的html,并获取超链接。同时根据超链接里面的关键字和对应的超链接文字长度,来筛选的小说名称!

很明显,这样做的效率是比较低的,因为HTMLParser模块并不是专门来获取超链接的,所以他的效率让我十分不满意. 再加上 GAE本身是不支持多线程的(不支持用户开启多线程),而且,GAE的每次请求都要控制在30之内!而不幸中的万幸是GAE的UrlFetch 是异步的!因此,我每次请求只能分析十几个页面。

 

第二个版本:

我改进了分析HTML的模块,放弃了HTMLParser模块,使用python的正则表达式!令人欣喜的是,我不仅解决了分析HTML过慢的问题,同时对于如何更加过滤有效超链接也得到了完美的解决,至少我是这么认为的!

        秘密就在于,我对每一个网站设置一套正则表达式,注意是一套而不是一个!

为什么我要设置一套呢?且看我都设置了什么样的正则表达式吧!现在以起点中文网站为例子来演示:

1.小说名字的超链接正则:

<[a|A]/s+[^>]*href/s*=[/'/" ]*([/]{0,1}Book/[/d][^/s/?/"/']*|http://www/.qidian/.com/Book/[/d][^/s/?/"/']*)[/'/" ]*[^>]*>([^<]{1,10}?)</[a|A]/s*>

假设你已经明白python的正则表达式用法!可以看出,符合正则表达式的超链接100%的都是能够通向一个小说的介绍页面的!虽然可能他的超链接内容是“[点击阅读]”这样的文字!但是不要紧,每一本小说,我是认为他的小说名字是唯一的,就是说同样名字的小说我只存储一遍.或许这不是绝对的,但是为了将复杂问题简单化,暂时我认为这是正确的!

 

2.小说目录页的超链接正则:

<[a|A]/s+[^>]*href/s*=[/'/" ]*([/]{0,1}BookReader/[/d]{1,10}[^/s/?/"/'/,]*/.aspx|http://www/.qidian/.com/BookReader/[/d]{1,10}[^/s/?/"/'/,]*/.aspx)[/'/" ]*[^>]*>([^<]{1,12}?)</[a|A]/s*>

为什么要单独提取目录页的超链接呢? 通过分析多个小说网站,我发现我分析的小说网站对每一本小说都有一个介绍用的页面,在这个页面只有一个超链接是链向目录页的!通过这个超链接进入目录页是最快和最准确的!因此我专门做了一个函数用来分析小说介绍页,找出这个特殊的超链接!

 

在这个过程中我发现,在小说介绍页面中会出现一些其他小说的链接。或者相同类型,或者是作者推荐,又或者是作者的其他小说。因此,在分析完目录页超链接后,我又用小说名字的超链接正则分析了一遍。结果是令人振奋的,程序检索到的绝大多数小说都是通过这种方式得到的!因此我取消了对小说首页的频繁扫描!这是值得并且更加高效的!

 

3.小说章节的超链接正则:

<[a|A]/s+[^>]*href/s*=[/'/" ]*([/d]{1,10}[^/s/?/"/']*/.aspx|http://vipreader/.qidian/.com/BookReader/vip[^/s/?/"/']*)[/'/" ]*[^>]*>(.*?)</[a|A]/s*>

通过上一个正则,我获得了小说目录页的精确地址,那么剩下 的事情就非常简单了,只需要针对章节的超链接写一个正则就OK了,需要注意的是,有些网站对于vip章节有着特殊的链接。所以正则要写的完美一点.

 

就这样,我第一步扫描网站首页,找出一部分小说!第二步,通过分析小说介绍页面来获取小说的目录页和其他的小说!并将不重复的收录在我的数据库中!

 

在这个版本中程序的效率提高的是最快的!因为,我可以用正则只定位超链接而忽略其他标记语言!这让我想起了“因为专注,所以高效!”这句话,也可能原话不是这么说的.不过作为这个版本的总结确实很合适.

 

程序是没有完美的!或者说程序都是正在走向完美! 虽然我在第二个版本中极大的提高了程序的性能,但是GAE给予的那点免费的CPU使用时间还是不够我的程序使用!原因很简单,我不知道小说什么时候更新所以我需要不断的频繁的去扫描!我将在第三版中再次提高我的程序运行效率.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值