时间:2021-05-22
你是否苦恼于网上无法下载的“小说在线阅读”内容?或是某些文章的内容让你很有收藏的冲动,却找不到一个下载的链接?是不是有种自己写个程序把全部搞定的冲动?是不是学了 python,想要找点东西大展拳脚,告诉别人“哥可是很牛逼的!”?那就让我们开始吧! 哈哈~
好吧,我就是最近写 Yii 写多了,想找点东西调剂一下.... = =
本项目以研究为目的,所有版权问题我们都是站在作者的一边,以看盗版小说为目的的读者们请自行面壁!
说了这么多,我们要做的就是把小说正文的内容从网页上爬下来,我们的研究对象是全本小说网....再次声明,不对任何版权负责....
一开始先做最基础的内容,就是把某一章的内容抓取下来。
环境:Ubuntu, Python 2.7
基础知识
这个程序涉及到的知识点有几个,在这里列出来,不详细讲,有疑问的直接百度会有一堆的。
1.urllib2 模块的 request 对像来设置 HTTP 请求,包括抓取的 url,和伪装浏览器的代理。然后就是 urlopen 和 read 方法,都很好理解。
2.chardet 模块,用于检测网页的编码。在网页上抓取数据很容易遇到乱码的问题,为了判断网页是 gtk 编码还是 utf-8 ,所以用 chardet 的 detect 函数进行检测。在用 Windows 的同学可以在这里 http://download.csdn.net/detail/jcjc918/8231371 下载,解压到 python 的 lib 目录下就好。
3. decode 函数将字符串从某种编码转为 unicode 字符,而 encode 把 unicode 字符转为指定编码格式的字符串。
4. re 模块正则表达式的应用。search 函数可以找到和正则表达式对应匹配的一项,而 replace 则是把匹配到的字符串替换。
思路分析:
我们选取的 url 是 http://patible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent } req = urllib2.Request(myUrl, headers = headers) myResponse = urllib2.urlopen(req) myPage = myResponse.read() charset = chardet.detect(myPage) charset = charset['encoding'] if charset == 'utf-8' or charset == 'UTF-8': myPage = myPage else: myPage = myPage.decode('gb2312','ignore').encode('utf-8') unicodePage = myPage.decode("utf-8") # 找出 id="content"的div标记 try: #抓取标题 my_title = re.search('<h1>(.*?)</h1>',unicodePage,re.S) my_title = my_title.group(1) except: print '标题 HTML 变化,请重新分析!' return False try: #抓取章节内容 my_content = re.search('<div.*?id="htmlContent" class="contentbox">(.*?)<div',unicodePage,re.S) my_content = my_content.group(1) except: print "内容 HTML 变化,请重新分析!" return False my_content = my_content.replace("<br />","\n") my_content = my_content.replace(" "," ") #用字典存储一章的标题和内容 onePage = {'title':my_title,'content':my_content} try: #找到页面下方的连接区域 foot_link = re.search('<div.*?class="chapter_Turnpage">(.*?)</div>',unicodePage,re.S) foot_link = foot_link.group(1) #在连接的区域找下一页的连接,根据网页特点为第三个 nextUrl = re.findall(u'<a.*?href="(.*?)".*?>(.*?)</a>',foot_link,re.S) #目录链接 dir_url = nextUrl[1][0] nextUrl = nextUrl[2][0] # 更新下一次进行抓取的链接 self.url = nextUrl if(dir_url == nextUrl): self.flag = False return onePage except: print "底部链接变化,请重新分析!" return False # 用于加载章节 def downloadPage(self): f_txt = open(u"斗罗大陆.txt",'w+') while self.flag: try: # 获取新的页面 myPage = self.GetPage() if myPage == False: print '抓取失败!' self.flag = False title = myPage['title'].encode('utf-8') content = myPage['content'].encode('utf-8') f_txt.write(title + '\n\n') f_txt.write(content) f_txt.write('\n\n\n') print "已下载 ",myPage['title'] except: print '无法连接服务器!' self.flag = False f_txt.close() def Start(self): print u'开始下载......\n' self.downloadPage() print u"下载完成" #----------- 程序的入口处 ----------- print u""" --------------------------------------- 程序:阅读呼叫转移 版本:0.3 作者:angryrookie 日期:2014-07-08 语言:Python 2.7 功能:按下回车开始下载 --------------------------------------- """ print u'请按下回车:' raw_input(' ') myBook = Book_Spider() myBook.Start()
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近有网友说自己不知道uc浏览器小说阅读器怎么用,接下来下文小编将为大家演示uc浏览器小说阅读器使用教程,“小说阅读器”是uc浏览器内很
超牛txt小说阅读器Mac版是一款非常不错的小说阅读器,阅读起来非常流畅,所占的内存也比较小,但是怎么才能正确的使用超牛txt小说阅读器在Mac电脑上阅读自
迷你TXT小说阅读器是一款非常方便的小说阅读器,为了让您能更加顺畅的看小说,在这里为大家带来软件使用的快捷方式!没有迷你TXT小说阅读器的朋友可以点击此处下载h
本文实例讲述了Android编程实现小说阅读器滑动效果的方法。分享给大家供大家参考,具体如下:看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,
云帆小说阅读器打不开解决方法大家想知道吗?很多朋友表示想要使用云帆小说阅读器看小说却打不开,怎么回事呢?让我们一起通过下文了解解决方法吧。软件名称:云帆小说阅读