import requests
import re
import os
# https://www.kanunu8.com/book3/8257/
def main():
url = 'https://www.kanunu8.com/files/16.html' # 小说主页的网址
r0 = requests.get(url).content.decode('gbk') # 获得网页的内容并转码为decode格式
pattern = re.compile(r'(/book\d/\d{4}/)"><font color="#dc143c">(《.*》)', ) # 确定匹配的规则
href = pattern.findall(r0) # 匹配小说的网址片段以及《》内的文章名
return href
def getUrl(h2):
url = 'https://www.kanunu8.com' + h2 # 拼接之后就是小说的网址
r = requests.get(url).content.decode('gbk')
pattern = re.compile(r'<a href="(\d{6}.*)">(.*)</a>')
hl = pattern.findall(r) # 匹配到每一章的的url和标题
return hl
def text(ul, h1): # 获取标题和内容
url2 = 'https://www.kanunu8.com/' + h1 + ul
r1 = requests.get(url2).content.decode('gbk')
pattern1 = re.compile(r'4">(.*)</font>') # 题目
pattern2 = re.compile(r'<p>(.+)</p>', re.S) # 内容
lst = list()
t1 = pattern1.findall(r1)
t2 = pattern2.findall(r1)
t2 = t2[0] # 一维列表转化为字符串
t2 = re.sub(r'&\w*;', '', t2) # 去除怪异字符片段
t2 = re.sub(r'<br />', '', t2) # 去除换行符
t2 = re.sub(r'#\d*;', '', t2)
t2 = re.sub(r'\s*', '', t2) # 去掉空格
t1 = ''.join(t1) # 把列表拼接成字符串,把,更换成''
lst.append([t1, t2]) # 存储标题和内容到列表里
return lst
def write(name, txt): # 写入
with open(name + '-正则爬取.txt', 'a') as f:
f.write('\n' + txt + '\n')
f.close()
def osPath(path): # 这个是创建一个文件夹
isExists = os.path.exists(path) # 判断文件夹是否存在,存在返回True,否则False
if not isExists:
os.makedirs(path) # 如果文件不存在,新建一个文件
os.chdir(path) # 切换到新建的文件夹下进行操作
if __name__ == '__main__':
osPath('小说')
m = main() # 调用main方法获取小说的网址片段列表,以及对应的文章名
for j in m:
print('文章名', j[1])
h = getUrl(j[0]) # 网址片段传入getUrl方法获取每一章的URL
for i in h:
print('\t正在下载---->', i[1]) # i[1]是章节的标题名
try:
t = text(i[0], j[0]) # 传入网址,返回标题和内容
for tet in t[0]:
write(j[1], tet)
except:
print(i[1], '\t\t下载失败')
print('-*-下载完毕-*-')
哎嘿嘿嘿
下次写个封装到类里的
这个有些麻烦了