打开小说所在界面,右击选择查看网页源代码
1.在头部能够看到'charset=utf-8'得知文件的编码为'uft-8'!,url=http://www.17k.com/list/2921315.html
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)
#
效果如下
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('  ','')
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()