笔趣看–小说下载助手
今天我们来爬取笔趣看的小说,网址为https://www.biqukan.com/
话不多说,直接上代码:
import re # 正则表达式
import requests
from bs4 import BeautifulSoup
import os
def init():
print('*'*50)
print('--------------欢迎使用笔趣看小说下载助手-----------------')
print('使用方式:')
print('\t\t\t1.1_1094')
print('\t\t\t2.一念永恒')
#input:输入框
global book_url,book_name
book_url = input('请输入小说编号: ')
book_name = input('请输入小说名字确认: ')
# 获取小说的章节目录
get_book_zhangjie()
def get_book_zhangjie():
try:
# 1.verify:SSL认证,True开启,False关闭
# url = 'https://www.biqukan.com/0_910/'
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'}
# 2.发起请求:url,headers,verify
url = 'https://www.biqukan.com/' + book_url + '/'
response = requests.get(url=url, headers=head, verify=True)
# search:从目标字符串寻找时代的字符
# span()[1]: 可以获取序列的长度
# print(re.search('.com',url),re.search('.com',url).span()[1])
url = url[:re.search('.com', url).span()[1]]
# print(url)
# 3.验证访问状态
print('访问状态:', response.status_code)
if response.status_code == 200:
# 4.设置编码格式
response.encoding = 'gbk'
# 5.获取二进制内容
html = response.content
# 测试1:print(html)
# 6.使用bs4解析内容 1.内容 2.解析器
bs = BeautifulSoup(html, 'lxml')
# 7.订制过滤规则
tag_dl = bs.find('dl')
start_tag = False
for tag_dd in tag_dl:
# 8.判断dd章节内容:
if tag_dd == '\n':
continue
# 9.判断章节什么时候到正文卷
elif tag_dd.string == '《' + book_name + '》正文卷':
start_tag = True # 开始下载的开关
print(tag_dd.string)
elif start_tag:
# 10.下载 1.章节名字 2.url
zhangjie_name = tag_dd.a.string
zhangjie_src = url + tag_dd.a['href']
# 获取小说章节的内容
get_book_zhangjie_content(zhangjie_name, zhangjie_src)
else:
print('内容不健康,请重新选择------------')
init() # 重新操作
except:
print('内容不健康,请重新选择------------')
init() # 重新操作
def get_book_zhangjie_content(zhangjie_name,zhangjie_src):
response = requests.get(url=zhangjie_src,headers={},verify=True)
if response.status_code == 200:
response.encoding = 'gbk'
bs = BeautifulSoup(response.content,'lxml')
#过滤器
div_content = bs.find(attrs={'id':'content','class':'showtxt'})
#替换字符串内部的空格符
# [/xa0] =  
# \r:回到首行 \n:跨行
lines = re.sub('[\xa0]+', '\r\n', div_content.text)
# 测试:
#print(lines)
path = '笔趣看小说' + '\\' + book_name
if not os.path.exists(path):
os.makedirs(path) #创建多个目录
#创建每个的章节文件并写入内容
file = open(path + '\\'+zhangjie_name+'.txt','w',encoding='utf-8')
file.writelines(lines) #写入一行
file.close()
print(zhangjie_name, zhangjie_src,'下载完毕------')
else:
print('该章节不存在~~~~~~~~~')
if __name__ == '__main__':
#初始化
init()
知识重点:正则表达式、os模块里os.mkdir(path)的用法、bs4的操作等