当前位置:   article > 正文

python爬取网络小说_python 爬虫初级案例 爬取网络小说

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'<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
  • 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
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147

四、代码说明:

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/825085
推荐阅读
相关标签
  

闽ICP备14008679号