版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/jcjc918/article/details/37533073

    你是否苦恼于网上无法下载的“小说在线阅读”内容?或是某些文章的内容让你非常有收藏的冲动,却找不到一个下载的链接?是不是有种自己写个程序把全部搞定的冲动?是不是学了 python。想要找点东西大展拳脚,告诉别人“哥但是非常牛逼的!

”?那就让我们開始吧。 哈哈~

    好吧。我就是近期写 Yii 写多了,想找点东西调剂一下.... = =

    本项目以研究为目的,全部版权问题我们都是站在作者的一边,以看盗版小说为目的的读者们请自行面壁!

    说了这么多,我们要做的就是把小说正文的内容从网页上爬下来,我们的研究对象是全本小说网....再次声明。不正确不论什么版权负责....

    一開始先做最基础的内容,就是把某一章的内容抓取下来。

    环境:Ubuntu, Python 2.7

    基础知识

    这个程序涉及到的知识点有几个,在这里列出来,不具体讲。有疑问的直接百度会有一堆的。

    1.urllib2 模块的 request 对像来设置 HTTP 请求,包括抓取的 url,和伪装浏览器的代理。

然后就是 urlopen 和 read 方法,都非常好理解。

    2.chardet 模块,用于检測网页的编码。

在网页上抓取数据非常easy遇到乱码的问题,为了推断网页是 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://www.quanben.com/xiaoshuo/0/910/59302.html。斗罗大陆的第一章。你能够查看网页的源码,会发现仅仅有一个 content 标签包括了全部章节的内容,所以能够用正则把 content 的标签匹配到,抓取下来。试着把这一部分内容打印出来,会发现非常多 <br /> 和 &nbsp。<br /> 要替换成换行符, &nbsp 是网页中的占位符。即空格,替换成空格就好。这样一章的内容就非常美观的出来了。完整起见,相同用正则把标题爬下来。

# -*- coding: utf-8 -*-

import urllib2
import re
import chardet class Book_Spider: def __init__(self):
self.pages = [] # 抓取一个章节
def GetPage(self):
myUrl = "http://www.quanben.com/xiaoshuo/0/910/59302.html";
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(myUrl, headers = headers)
myResponse = urllib2.urlopen(request)
myPage = myResponse.read() #先检測网页的字符编码,最后统一转为 utf-8
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") 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}
return onePage # 用于载入章节
def LoadPage(self):
try:
# 获取新的章节
myPage = self.GetPage() if myPage == False:
print '抓取失败!'
return False self.pages.append(myPage)
except:
print '无法连接server。' #显示一章
def ShowPage(self,curPage):
print curPage['title']
print curPage['content'] def Start(self):
print u'開始阅读......\n'
#把这一页载入进来
self.LoadPage()
# 假设self的pages数组中存有元素
if self.pages:
nowPage = self.pages[0]
self.ShowPage(nowPage) #----------- 程序的入口处 -----------
print u"""
---------------------------------------
程序:阅读呼叫转移
版本号:0.1
作者:angryrookie
日期:2014-07-05
语言:Python 2.7
功能:按下回车浏览章节
---------------------------------------
""" print u'请按下回车:'
raw_input()
myBook = Book_Spider()
myBook.Start()

程序执行完在我这里但是非常好看的,不信请看:^_^

Python 爬虫 之 阅读呼叫转移(一)的更多相关文章

  1. Python 爬虫 之 阅读呼叫转移(三)

    尽管上一篇博客中我们能够连续地阅读章节了,可是.难道每一次看小说都执行一下我们的 Python 程序?连记录看到哪里都不行,每次都是又一次来过?当然不能这样,改! 如今这么多小说阅读器,我们仅仅须要把 ...

  2. 用python爬虫监控CSDN博客阅读量

    作为一个博客新人,对自己博客的访问量也是很在意的,刚好在学python爬虫,所以正好利用一下,写一个python程序来监控博客文章访问量 效果 代码会自动爬取文章列表,并且获取标题和访问量,写入exc ...

  3. Python爬虫入门

    Python爬虫简介(来源于维基百科): 网络爬虫始于一张被称作种子的统一资源地址(URLs)列表.当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即 ...

  4. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  5. Python爬虫初学(二)—— 爬百度贴吧

    Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...

  6. [Python爬虫]使用Selenium操作浏览器订购火车票

    这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...

  7. [转]Python爬虫框架--pyspider初体验

    标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报  分类: Python(8)  版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  8. Python爬虫开发与项目实战

    Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...

  9. Python爬虫之使用celery加速爬虫

      celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度.关于celery的更多介绍及例子,笔者可以参考文章Python之celery的简介与使用.   本文将介绍 ...

随机推荐

  1. php爬取微信文章内容

    php爬取微信文章内容 在做官网升级的时遇到新的需求,需要将公司公众号文章显示在官网的文章模块下.但存在的问题是:微信文章的链接会失效,并且需要对文章部分内容做修改,同时要减少微信运营人员的工作量,避 ...

  2. [AI开发]centOS7.5上基于keras/tensorflow深度学习环境搭建

    这篇文章详细介绍在centOS7.5上搭建基于keras/tensorflow的深度学习环境,该环境可用于实际生产.本人现在非常熟练linux(Ubuntu/centOS/openSUSE).wind ...

  3. java常用工具(jps等)说明

    Java为我们提供了大量的工具辅助我们进行开发,位于jdk目录下的bin目录里,本篇博客将会随时更新相关工具的使用说明. jps 获取当前运行的java应用 lgj@lgj-Lenovo-G470:~ ...

  4. MYSQL如何计算两个日期间隔天数

    如何透过MYSQL自带函数计算给定的两个日期的间隔天数   有两个途径可获得   1.利用TO_DAYS函数   select to_days(now()) - to_days('20120512') ...

  5. React教程(一) React介绍与搭建

    React的介绍: React来自于Facebook公司的开源项目 React 可以开发单页面应用 spa(单页面应用) react 组件化模块化 开发模式 React通过对DOM的模拟(虚拟dom) ...

  6. markdown实战问题备忘

    问题一:怎么把文档标题放在中间呢? 下面这个能解决问题. 居中: <center>诶嘿</center> 左对齐: <p align="left"&g ...

  7. Elasticsearch的基本概念和指标

    背景 在13年的时候,我开始负责整个公司的搜索引擎.嗯……,不是很牛的那种大项目负责人.而是整个搜索就我一个人做.哈哈. 后来跳槽之后,所经历的团队都用Elasticsearch,基本上和缓存一样,是 ...

  8. 数据结构之表(C语言实现)

    抽象数据类型 (abstract data type,ADT) 抽象数据类型是一些操作的集合.抽象数据类型是数学中的定义,在ADT中,我们不关心操作是如何被实现的.因此,这可以看做是模块化的扩充.例如 ...

  9. 如何开发AR增强现实应用与产品

    2016年被称为VR元年,可见火爆程度,但是我要告诉你,其实还有一种技术AR(增强现实)技术,才是下一个真正的“风口”技术.可以预见的是,未来AR应用爆发之时,必将超越VR产业规模,开拓千亿级市场空间 ...

  10. JAVA WEB快速入门之环境搭建

    前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...