美文网首页
使用简单Python爬虫获取一个干净整洁的小说文件

使用简单Python爬虫获取一个干净整洁的小说文件

作者: Truthgray | 来源:发表于2018-12-31 18:40 被阅读0次

打开小说所在界面,右击选择查看网页源代码

1.在头部能够看到'charset=utf-8'得知文件的编码为'uft-8'!,url=http://www.17k.com/list/2921315.html
头部.png
import urllib.request as req                            #导入urllib库,用于对url进行操作
webpage=req.urlopen(url)                        #打开网页并将网页源代码临时存储
file=webpage.read().decode('utf-8')             #将网页源代码转码为网页使用的编码并读取
2.查看网页源代码的规律,标题是在'<div></div>'之间,章节信息是存在'<dd></dd>'之间,其他的信息同样是这样的规律

代码如下:

#根据网页源代码的特征,使用re库的正则表达式获取需要的数据,获取到的数据是一个列表
    import re                                    #导入re库
    title=re.findall(r'<div class="Main List">(.*?)</div>',file,re.S)
4、对<div></div>中进行数据清洗,代码如下
其余部分操作方法一致
#通re.findall()获取到的是一个列表,由网页源代码可知标题信息在第一个<div></div>中
lines=title[0]
#数据清洗
lines=lines.strip().split('\n')

thing=[]                        #作品以及作者信息用列表thing存储
    for line in lines:
        index=line.find('</')
        index_left=line.rfind('>',0,index)                  #查找在'>'之前出现的最后一个'<'
        thing.append(line[index_left+1:index])
print(lines)
print(thing)
#
效果如下
image.png
5、将数据写入文件
b,d=read_cata(url)                                #用b,d,c分别存储函数自定义函数read_cata()返回的作品信息,章节标题,章节超链接
outfile=open('nongyi.txt','w')                  #打开一个文件'nongyi.txt',如人文件不存在就会自动生成文件,'w'代表文件为写模式,其会将文件中的数据清除全部重新写入
for i in b:                                     
    outfile.write('%s\n'%i)                         #将作品信息写入文件
for i in d:                 
    outfile.write('%s\n'%i)                         #将每张章节标题写入文件        
for i in c:
    cata_thing_url(i,outfile)                       #调用cata_thing_url函数,将正文写入文件
outfile.close()

整本小说的完整代码:

import urllib.request as  req
import re
#获取小说的相关信息
url='http://www.17k.com/list/2921315.html'

def read_cata(url):
    webpage=req.urlopen(url)             #打开网页并将网页源代码临时存储
    file=webpage.read().decode('utf-8')             #将网页源代码转码为网页使用的编码并读取
   #根据网页源代码的特征获取需要的数据
    title=re.findall(r'<div class="Main List">(.*?)</div>',file,re.S)
    lines=title[0]                                       #通过re.findall()获取到的是一个列表
    lines=lines.strip().split('\n')
    thing=[]                        #作品以及作者信息用列表thing存储
    for line in lines:
        index=line.find('</')
        index_left=line.rfind('>',0,index)                  #查找在'>'之前出现的最后一个'<'
        thing.append(line[index_left+1:index])
#获取存在'<dd></dd>'之间的章节信息
    cata=re.findall(r'<dd>(.*?)</dd>',file,re.S)        
    lines_cata=cata[1].strip()
    lines_cata=lines_cata.replace('\n','').split('</a>')
    cata_thing=[]
    cata_thing_href=[]
    for line in lines_cata:             #获取每章章节的标题和超链接
        index=line.find('</span>')
        index_left=line.rfind('>',0,index)                  
        cata_thing.append(line[index_left+1:index].replace(' ',''))
        thing_href=re.findall('href="(.*?)"',line)              
        cata_thing_href.append(thing_href)
    return thing,cata_thing,cata_thing_href[:-1]
    
 #获取每一章的正文内容   
def cata_thing_url(href,filename):              
    website='http://www.17k.com'     
    url=website+href[0]                                   #将网站域名加上组成一个完整的链接
    webpage=req.urlopen(url)
    file=webpage.read().decode('utf-8')
    title=re.findall(r'<title>(.*?)</title>',file,re.S)[0].strip()       #获取章节标题,在第一个<title></title标记中
    filename.write('\t\t\t\t%s'%title)                          #将标题写入文件
    lines=re.findall(r'<div class="p">(.*?)<div class="author-say">',file,re.S)
    lines=lines[0].replace('<br /><br />','>').split('>')
    for line in lines:                                  #将每一行进行数据清洗后写入文件
        line=line.replace('&#12288;&#12288;','')
        line=line.replace('\n','\t')
        filename.write('\t%s\n'%line)    
    return
b,d,c=read_cata(url)                        #对获取章节的标题和衔接的read_cata函数进行调用

#将爬取到底数据写入当前目录文件'nongyi.txt'
outfile=open('nongyi.txt','w')
for i in b:                                     
    outfile.write('%s\n'%i)                         #将作品信息写入文件
for i in d:                 
    outfile.write('%s\n'%i)                         #将每张章节标题写入文件        
for i in c:
    cata_thing_url(i,outfile)                       #调用cata_thing_url函数,将正文写入文件
outfile.close()
3.打开nongyi.txt能够看到以下效果
效果图.png

此方法仅供参考,勿做商业操作

相关文章

网友评论

      本文标题:使用简单Python爬虫获取一个干净整洁的小说文件

      本文链接:https://www.haomeiwen.com/subject/qxswlqtx.html