1、爬虫代码运行暂停使用ctrl+c
2、针对网站:笔趣阁_免费无弹窗阅读元尊,圣墟,庆余年等小说的笔趣阁
仅需要改写代码中的 url = f'https://www.biqooge.com/3_3341/'
解决问题:网上很多案例仅爬取章节链接,没有考虑有些网站前端有倒叙章节。下面代码可以实现去除倒叙章节,从第一章开始爬取。
import requests
import parsel
from tqdm import tqdm
requests.packages.urllib3.disable_warnings()
def get_response(html_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
response = requests.get(url=html_url, headers=headers,verify=False)
response.encoding = response.apparent_encoding
return response
def save(novel_name, title, content):
"""
保存小说
:param title: 小说章节标题
:param content: 小说内容
:return:
"""
filename = f'{novel_name}' + '.txt'
# 一定要记得加后缀 .txt mode 保存方式 a 是追加保存 encoding 保存编码
with open(filename, mode='a', encoding='utf-8') as f:
f.write('\n')
# 写入标题
f.write(title)
# 换行
f.write('\n')
# 写入小说内容
f.write(remove_empty_lines(content))
def remove_empty_lines(text):
lines = text.split("\n") # 将文本按行分割
non_empty_lines = [line for line in lines if line.strip() != ""] # 过滤非空行
return "\n".join(non_empty_lines)
def get_one_novel(name, novel_url):
# 调用请求网页数据函数
response = get_response(novel_url)
# 转行成selector解析对象
selector = parsel.Selector(response.text)
# 获取小说标题
title = selector.css('.bookname h1::text').get()
# 获取小说内容 返回的是list
content_list = selector.css('#content::text').getall()
# ''.join(列表) 把列表转换成字符串
content_str = ''.join(content_list)
save(name, title, content_str)
def get_all_url(html_url):
# 调用请求网页数据函数
response = get_response(html_url)
# 转行成selector解析对象
selector = parsel.Selector(response.text)
# 所有的url地址都在 a 标签里面的 href 属性中
dds = selector.css('#list dd a::attr(href)').getall()
####################修改
#print(dds)
del dds[0:9]
#print(dds)
# 小说名字
novel_name = selector.css('#info h1::text').get()
for dd in tqdm(dds):
novel_url = 'https://www.biqooge.com' + dd
get_one_novel(novel_name, novel_url)
if __name__ == '__main__':
#novel_id = input('输入书名ID:')
url = f'https://www.biqooge.com/3_3341/'
get_all_url(url)