python爬取网络小说

一、环境说明
1.IDE
python 3.6 ,vs 2017
网上大多数人都是在使用PYCHARM ,关于VS 2017或者其他版本下使用PYTHON的内容较少,还有很多地方需要摸索,有不足的地方请指正
2.操作系统
64位 window 10 专业版
二、程序说明
1.本程序是入门级爬虫 程序,本人初次尝试python爬虫,代码有不足的地方请指正
2.程序本身采用三种方式完成爬虫功能,分别是:
单页面固定值爬取
变量页面循环爬取功能
函数体循环爬取
3.所使用的莫跨
urllib 网络通讯主要模块
re 正则表达式

上述两个模块的使用请自行查阅相关资料,在CSDN上很容易就能搜索到,目前网络爬虫网上的例子基本分为两种,一种就是用urllib进行细节化爬取,另一种就是使用一个名叫beautifulsoup的包,按网上的例子来看,这个包功能很强大,貌似可以直接对地址下的所有内容进行直接下载,也就是说将网站理解为FTP,对路径下所存在的内容直接下载,省去很多繁琐的工作,但是具体没有尝试过,需要读者自己去尝试

三、代码内容

from urllib import request
import re
#定义本体程序
#if __name__ == "__main__":
    #单页面常量运行
    #response = request.urlopen("https://www.7kshu.com/41/41319/12622232.html")
    #html = response.read()
    #html = html.decode("gbk")
    #title_re = re.compile(r'

(.*?)

')
#text_re = re.compile(r'

([\s\S]*?)
') #title = str(re.findall(title_re,html)) #text = str(re.findall(text_re,html)) #textend = title + text #textend = textend.replace('
','')
##print(textend) #f = open("E:\\dssytest.txt","w") #f.write(textend) #f.close() #print(title + '保存完毕') #response = request.urlopen("https://www.7kshu.com/41/41319/" + m +".html") #变量循环运行 #打开文本,如果没有则创建 # f = open("E:\\dssy.txt","w") # #设定地址变量 # for m in range(12622130 , 23269694): # #设定下载地址 # url = 'https://www.7kshu.com/41/41319/' + str(m) + '.html' # #response = request.urlopen("https://www.7kshu.com/41/41319/" + str(m) +".html") # #打开地址 # response = request.urlopen(url) # #加载地址 # html = response.read() # #编码格式转换 # html = html.decode("gbk") # #正则检索标题 # title_re = re.compile(r'

(.*?)

')
# #正则检索正文 # text_re = re.compile(r'

([\s\S]*?)
') # #对标题进行匹配 # title = str(re.findall(title_re,html)) # #对正文进行匹配 # text = str(re.findall(text_re,html)) # #拼接正文和标题 # textend = title +"\n"+ text # #将正文中的回车符等符号进行修正替换 # textend = textend.replace('
',"\n")
# textend = textend.replace("['",'') # textend = textend.replace("']",'') # #print(textend) # #f = open("E:\\dssy.txt","w") # #写入文件 # f.write("\n" + textend) # #f.close() # #print(url) # print(title + '保存完毕') #f.close() #print('下载完成') # #print(html) #函数实现 def download(url): response = request.urlopen(url) #加载地址 html = response.read() #编码格式转换 html = html.decode("gbk") #正则检索标题 title_re = re.compile(r'

(.*?)

'
) #正则检索正文 text_re = re.compile(r'

([\s\S]*?)
') #对下一章序号进行检索 p1 = (r"]*id=[\"\"]nextpage[\"\"][^>]*>") pattern1 = re.compile(p1) matcher1 = re.search(pattern1,html) #print(matcher1.group()) p2 = (r"(?<=(href=\")).+?(?=(\.html))") pattern2 = re.compile(p2) matcher2 = re.search(pattern2,matcher1.group()) title_next = str(matcher2.group()) #print(title_next) #对标题进行匹配 title = str(re.findall(title_re,html)) #对正文进行匹配 text = str(re.findall(text_re,html)) #拼接正文和标题 textend = text #将正文中的回车符等符号进行修正替换 textend = textend.replace('
'
,"\n") textend = textend.replace("['",'') textend = textend.replace("']",'') #print(title,'下载完成') #print(title_next) #返回处理过的正文和下一章地址代码 return textend,title_next,title def save_txt(x): if x != '': #f.write("\n") f.write("\n" + x) else: print('保存错误,当前'+ download(url)[2]) return #测试用常量 #url = 'https://www.7kshu.com/41/41319/12622232.html' #download(url) #byte = download(url) #print('下一章',download(url)[1]) if __name__ == "__main__": #定义初始值 m = '12623030' #数据爬取地址初始值 url = 'https://www.7kshu.com/41/41319/' + str(m) + '.html' #打开保存文本 f = open("E:\\dssy.txt","w") #初始下载 download(url) #定义下载返回数组 result1 = download(url) #定义初始下载正文变量 x = result1[0] #初始正文保存 save_txt(x) print(result1[2],'保存完成') #定义下一章初始值 m = str(result1[1]) #开始循环调用 while m != 'index': #m = str(result1[1]) #下一章下载地址 url2 = 'https://www.7kshu.com/41/41319/' + str(m) + '.html' #开始下载下一章 download(url2) #对下载函数的返回赋值给result2 result2 = download(url2) x = result2[0] #保存下一章 save_txt(x) print(result2[2],'保存完成') #M值为下一章页码 m = str(result2[1]) f.close() print('下载完成')

四、代码说明:

上面代码内容都是常规性函数和方法,较为简单,结构相对清晰,唯一的问题就是正则表达式,这块笔者也是初学者,各位读者还需要自行去掌握相关内容,最简单的方法就是对照正则表达式字典逐个字符去看,这样能快速理解代码含义

上述代码总共分三部分内容,各部分可独立运行,取消掉注释即可,第一部分为单页面功能及网络测试代码,第二部分为普通循环爬取功能代码,第三部分为函数体运行代码
目前这个程序存在几点问题:
1.程序没有增加网络出现故障或者中断情况下的处理,一旦网络出现问题程序就直接崩溃退出
2.程序总体效率不高,原因主要是单线程,单模块运行模式,这块缺陷后期有时间了再进行优化

本内容为原创内容,严禁转载,且不接受任何形式的修改

你可能感兴趣的:(python爬取网络小说)