赞
踩
一、环境说明
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'<h1>(.*?)</h1>')
#text_re = re.compile(r'<br /><br />([\s\S]*?)</div>')
#title = str(re.findall(title_re,html))
#text = str(re.findall(text_re,html))
#textend = title + text
#textend = textend.replace('<br />','')
##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'<h1>(.*?)</h1>')
# #正则检索正文
# text_re = re.compile(r'<br /><br />([\s\S]*?)</div>')
# #对标题进行匹配
# title = str(re.findall(title_re,html))
# #对正文进行匹配
# text = str(re.findall(text_re,html))
# #拼接正文和标题
# textend = title +"\n"+ text
# #将正文中的回车符等符号进行修正替换
# textend = textend.replace('<br />',"\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'<h1>(.*?)</h1>')
#正则检索正文
text_re = re.compile(r'<br /><br />([\s\S]*?)</div>')
#对下一章序号进行检索
p1 = (r"<a\s[^>]*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('<br />',"\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.程序总体效率不高,原因主要是单线程,单模块运行模式,这块缺陷后期有时间了再进行优化
本内容为原创内容,严禁转载,且不接受任何形式的修改
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。