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

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

如今这么多小说阅读器,我们仅仅须要把我们要的小说抓取到本地的 txt 文件中就好了,然后自己选个阅读器看。怎么整都看你了。

事实上上个程序我们已经完毕了大部分逻辑,我们接下来的修改仅仅须要把抓取到每一章的时候不用显示出来,而是存入 txt 文件之中。另外一个是程序是不断地依据下一页的 Url 进行抓取的,那么什么时候结束呢?注意当到达小说的最后一章时下一页的链接是和返回文件夹的链接是一样的。所以我们抓取一个网页的时候就把这两个链接拿出来,仅仅要出现两个链接一样的时候。就停止抓取。最后就是我们这个程序不须要多线程了,我们仅仅要一个不断在抓取小说页面的线程即可了。

只是,小说章节多一点时候,等待完毕的时间会有点久。眼下就不考虑这么多了,基本功能完毕就 OK....

基础知识:前面的基础知识 - 多线程知识 + 文件操作知识。

源码:

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

import urllib2
import urllib
import re
import thread
import chardet

class Book_Spider:

    def __init__(self):
        self.pages = []
        self.page = 1
        self.flag = True
        self.url = "http://www.quanben.com/xiaoshuo/0/910/59302.html"

    # 将抓取一个章节
    def GetPage(self):
        myUrl = self.url
        user_agent = ‘Mozilla/4.0 (compatible; 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 ‘无法连接server!‘
                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()

效果见图:

时间: 2024-10-30 08:56:16

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

Python 爬虫 之 阅读呼叫转移(二)

上一篇博客我们成功地从网页上爬下了小说的一个章节,理所当然地,接下来我们要把整本小说都爬下来.首先,我们要把程序从原来的读完一章就结束,改成读完一章之后可以继续进行下一章的阅读. 注意到每个小说章节的网页下面都有下一页的链接.通过查看网页源代码,稍微整理一下(  不显示了),我们可以看到这一部分的 HTML 是下面这种格式的: <div id="footlink"> <script type="text/javascript" charset=&q

Python 爬虫 之 阅读呼叫转移(一)

你是否苦恼于网上无法下载的"小说在线阅读"内容?或是某些文章的内容让你很有收藏的冲动,却找不到一个下载的链接?是不是有种自己写个程序把全部搞定的冲动?是不是学了 python,想要找点东西大展拳脚,告诉别人"哥可是很牛逼的!"?那就让我们开始吧! 哈哈~ 好吧,我就是最近写 Yii 写多了,想找点东西调剂一下.... = = 本项目以研究为目的,所有版权问题我们都是站在作者的一边,以看盗版小说为目的的读者们请自行面壁! 说了这么多,我们要做的就是把小说正文的内容从网

python爬虫-糗百阅读器

#!/usr/bi/env python # -*- coding:utf-8 -*- import urllib import urllib2 import re class Turtle(object): def __init__(self): self.pageIndex = 1 self.stories = [] self.enable = True self.header = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windo

Python爬虫进阶三之Scrapy框架安装配置

初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/latest/intro/install.html,最权威哒,下面是我的亲身体验过程. 1.安装Python 安装过程我就不多说啦,我的电

Python爬虫学习:三、爬虫的基本操作流程

本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap

Python爬虫利器三之Xpath语法与lxml库的用法

前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 BeautifulSoup 使用不太习惯的话,可以尝试下 Xpath. 参考文档: lxml python 官方文档 XPath语法参考 w3school 安装 pip install lxml 利用 pip 安装即可 XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在

Python爬虫教程-25-数据提取-BeautifulSoup4(三)

Python爬虫教程-25-数据提取-BeautifulSoup4(三) 本篇介绍 BeautifulSoup 中的 css 选择器 css 选择器 使用 soup.select 返回一个列表 通过标签名称:soup.select("title") 通过类名:soup.select(".centent") id 查找:soup.select("#name_id") 组合查找:soup.select("div #input_content

轻松入门Python爬虫,三个爬虫版本,带你以各种方式爬取校花网

爬虫是什么? 如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛, 沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序: 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片.视频) 爬到本地,进而提取自己需要的数据,存放起来使用: 为了帮助大家更轻松的学好Python开发,爬虫技术,Python数据分析等相关知识,给大家分享一套Python学习资料,小编推荐

Python爬虫(三)爬淘宝MM图片

直接上代码: # python2 # -*- coding: utf-8 -*- import urllib2 import re import string import os import shutil def crawl_taobaoMM(baseUrl, start, end): imgDir = 'mm_img' isImgDirExist = os.path.exists(imgDir) if not isImgDirExist: os.makedirs(imgDir) else: