23hh小说网——爬虫0.1python

news/2024/7/19 12:23:40 标签: python, 爬虫

这个是初版,就是把这个小说网上正在看的页面给抓下来。

 1 #! /bin/python
 2 # -*- coding:utf-8 -*-
 3 
 4 # --------------------------------------------
 5 #     程序:【看小说】爬虫
 6 #     版本:0.1
 7 #     作者:Silence
 8 #     日期:2014-03-30
 9 #     操作:输入quit退出
10 #     功能:自动把指定网站上的指定小说内容给抓下来,并显示出来
11 #    修改:0.2 提供一个目录页,把目录页中所有的目录章节都抓出来,并存储为txt文件====
12 # ---------------------------------------------
13 
14 import re
15 import urllib2
16 
17 from urlparse import urlparse
18 
19 class Novel_Tool:
20 
21     def __init__(self,weburl):
22         self.url = weburl
23         self.headers = {
24             'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
25         }
26         self.newLineChar = ''
27 
28     #获取当前页面的编码格式,现在某些小说网喜欢用gbk来编码
29     # 但是,也有一些不厚道的网站,他们的实际编码格式不是在页面中charset中定义的格式,暂时先忽略了
30     def getPageType(self,content):
31         pattern = re.compile('charset=.*?"')
32         pagetype = pattern.search(content).group()
33         pagetype = pagetype[8:len(pagetype) - 1]
34         return pagetype
35 
36     def start(self):
37         # 得到utf-8编码的小说返回文本
38         req = urllib2.Request(
39             url = self.url,
40             headers = self.headers
41         )
42         myResponse = urllib2.urlopen(req).read()
43         # print myResponse
44         decodeResp = myResponse.decode(self.getPageType(myResponse)).encode('utf-8')
45 
46         contentPattern = re.compile('(<dd id="contents">)((.|\s)*?)</dd>')
47 
48         content = contentPattern.search(decodeResp).group(2)
49         content = self.replaceWebTag(content)
50         print content
51         # print self.getNextPage(decodeResp)
52 
53     # 获取下一页的地址
54     def getNextPage(self,content):
55         # 先获取到下一页的位置
56         footlinkRex = re.compile('(footlink">)(.*?)</dd>')
57         foot = footlinkRex.search(content).group(2)
58         pattern = re.compile(r'(返回目录.*?(<a.*?">下一页))')
59         m = pattern.search(foot).groups()
60         nextUrl = m[len(m)-1][9:m[len(m)-1].find('">')]
61 
62         return self.url[0:self.url.rfind('/')+1] + nextUrl
63 
64     def replaceWebTag(self,content):
65         charToNoneRex = re.compile(r'&nbsp;')
66         charToNewLineRex = re.compile("<br />|<br>|<br/>")
67 
68         content = charToNoneRex.sub("",content)
69         content = charToNewLineRex.sub("\n",content)
70         return content
71 
72 
73 if __name__ == '__main__':
74     print u"""
75 # --------------------------------------------
76 #     程序:【看小说么】爬虫
77 #     版本:0.1
78 #     作者:Silence
79 #     日期:2014-03-30
80 #     操作:输入quit退出
81 #     功能:自动把指定网站上的指定小说内容给抓下来
82 # ---------------------------------------------"""
83 
84     myinput = raw_input('请输入要爬得小说初始目录页面(默认为第一章的页面)\n')
85     if myinput == '':
86         myinput = 'http://www.23hh.com/book/43/43957/15468368.html'
87         # myinput = 'http://www.23hh.com/book/43/43957/12229083.html'
88     nodel = Novel_Tool(myinput)
89     nodel.start()

 

转载于:https://www.cnblogs.com/SilenceCity/p/3640398.html


http://www.niftyadmin.cn/n/1070098.html

相关文章

python for遍历元素时,取n个元素

1. def chunks(s, step):return [s[i:istep] for i in range(0, len(s), step)]chunks(range(50), 10)返回值 [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, …

linux的引导和服务

目录 一、linux的引导过程 1、开机自检 2、MBR引导 3、GRUB菜单 4、加载linux内核 5、init进程初始化 二、MBR扇区修复 1、第二块磁盘修复 2、第二台主机修复 三、grub修复 1、恢复grub文件 四、修改密码 1、光驱修改密码 2、编辑模式修改密码 一、linux的引导过…

浅谈IC行业产业链以及贸易商在产业链中的作用  2008-10-16 12:45[转自Michael的博客]...

随着集成电路行业在中国的迅猛发展, 中国的低成本劳动力和开放的引入外资政策, 使得全球电子产品生产厂商为了降低成本, 增加产品市场竞争力, 纷纷在中国设立生产线, 而中国不断膨胀的购买力也促进了这一产业在中国的发展; 此外, 中国民族电子产品制造业也在此环境下实现了突飞…

JS判断手机浏览器

原理 JavaScript是前端开发的主要语言&#xff0c;我们可以通过 编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览器类型一般有两种办法&#xff0c;一种是根据各种浏览器独有的属性来分辨&#xff0c;另 一种是通过分析浏览器的userAgent属性来判断的。在许多…

linux的进程和计划任务

目录 一、程序的定义 1、程序的特点 二、进程的定义 1、进程的特点 2、僵尸进程 3、线程 三、管理进程的相关命令 1、ps命令 2、top命令 3、pgrep命令 4、pstree命令 5、lsof命令 四、进程的启动和关闭 1、启动进程 2、关闭进程 五、计划任务 1、at命令 2、c…

linux的系统安全及应用

目录 一、账号的安全控制 1、账号的优化 2、密码的安全的控制 二、用户命令的权限控制 1、历史命令的管理 2、切换用户 3、pam模块 4、sudo 5、grub加密 一、账号的安全控制 1、账号的优化 账号的优化一般分为下面几个步骤 1、将一些用户设置无法登录&#xff0c;防…

[翻译]Behavior-Driven Development (BDD)行为驱动开发(二)

测试驱动开发体现了开发人员对软件产品各部分运作方式的理解&#xff0c;而行为驱动开发则关注于开发人员对软件产品最终表现的行为的预期。 行为驱动开发 TDD更像是一种范式而不是一个过程。它描述了一种先编写测试&#xff0c;然后实现&#xff0c;并伴随可能的代码重构这样的…

Rhythmk 一步一步学 JAVA (18) Axis2 创建 WebService

一 > 环境配置 1、下载Axis2: 目前版本为 1.6.2 下载地址&#xff1a; http://axis.apache.org/axis2/java/core/ 下载 axis2-1.6.2-bin.zip 解压到 {任意目录}\axis2 如&#xff1a;G:\WorkSetting\zip\axis2-1.6.2 2、配置全局axis2环境&#xff1a; 添加系统全局变量&a…