版本(一):
全部代码如下
介绍:这个版本 可以把一个小说的所有章节都爬取下来
缺点:1:爬取效率低下,2:把最新章节也爬取下来了
思路介绍:
1:先到单个小说的页面
2:使用开发者模式,查看单个章节的a标签--->点击查看的标签--->跳转到该章节的页面
3:使用xpath获取到所有的a标签 中的href内容
4:对href标签的内容进行拼接
5:for循环 挨个请求拼接好的url
6:保存获取到的内内容
完成
import requests
from lxml import etree
#请求url
def get_url(url):
response = requests.get(url=url, headers=headers)
html = etree.HTML(response.text)
return html
#定义路径拼接函数
def pj_url(url):
return 'https://www.biquge.com' + url
#主函数
def resp(url):
html = get_url(url)
#获取小说名称
title_name = html.xpath('//h1/text()')[0]
all_name = html.xpath('//dd/a') #获取所有小说
# response_url = html.xpath('//dd/a/@href')
for name in all_name:
xs_url = name.xpath('./@href')[0] #获取单个小说的章节
#路径拼接
complete_url = pj_url(xs_url) #将单个小说的路径拼接
#对单个章节的内部内容进行数据清洗
tible,txt = chapter(complete_url)
txt = tible+'\n'+txt+'\n'
# 获取到了单个章节的所有内容后 进行保存
with open('{}2.txt'.format(title_name),'a',encoding='utf-8') as fp:
print('{}下载完成'.format(tible))
fp.write(txt)
#获取单个章节内容
def chapter(url):
#获取内容
# 请求单个章节的路径
html = get_url(url)
#获取章节小说的名称
tible = html.xpath('//h1/text()')[0]
#获取章节小说正文
txt_list = html.xpath('//div[@id="content"]/text()')
#对小说正文部分数据清洗,将处理好的内容保存到lis中
lis = []
for txt in txt_list:
i = txt.replace('\t','').replace('\n','').replace('\r','').replace("'",'').replace('\u3000','')
lis.append(i)
return tible,str(lis)[2:-2].replace(r"'",'')
if __name__ == '__main__':
#小说主路由
# url = 'https://www.biquge.com/31_31729/'#示例路由
url = input("请输入您想爬取的小说url:")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400',
# 'Cookie': 'obj=1; obj=1; UM_distinctid=176075e86b6258-0324a78ee682e2-3352487a-144000-176075e86b7515; CNZZDATA1278908080=321056136-1606439687-%7C1606981381; CNZZDATA1278862532=1058624029-1606436902-%7C1606978830'
}
resp(url)
运行效果如下