爬取88小说网小说的源代码
本帖最后由 pnnhnjh 于 2024-7-25 14:45 编辑简单的网站小说爬取程序(通过直接模拟点击下一章、下一页等元素获取相应链接,简单修改就可以下载别的网站的小说),运行后打开网站,选取你喜欢的小说,打开小说的开始页面(小说内容页),复制网址(如:“https://www.88xiaoshuo.net/Partlist/80415/60635846.shtml”)后粘贴到输入提示窗口回车即可。注:不输入任何内容直接回车则开始示例小说下载!
#coding=utf-8
import requests
from lxml import etree
import time
import re
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
}
def get_chaptercontent(chapterurl=''):# 获取每个章节的内容并保存
markbook = ''
while True:
try:
chaptercontent = ''
response = requests.get(chapterurl, headers=headers, timeout=10)
html=response.content.decode(response.apparent_encoding)
selector = etree.HTML(html)
bookname = selector.xpath('//a[@id="bookname"]/strong/text()')
chaptername = selector.xpath('//div[@class="zhangjieming"]/h1/text()')# 章节名称
chaptername = re.sub(r'\d{1,5}\.', '', chaptername)# 去掉里面数字开头,点号结尾的数字
# mainurl=selector.xpath('//a/@href')
mainurl=f'{url[:-1]}'
try:
###mark用于判断是否是要写章节名称,如果值是上一章,表示换章节要写章节名称,nexturl配合mainurl用于判断是否是最后页
markchapter = selector.xpath('//a/text()')# 注意空格
except:
markchapter = '上一章'# 出现异常,即不存在上一章,赋值为目录页的网址供后面检测为最后的章节# 注意空格
try:
nexturl = selector.xpath('//a/@href')# 注意空格
nexturl=f'{mainurl}{nexturl}'
except:
nexturl = mainurl# 出现异常,即不存在下一章,赋值为目录页的网址供后面检测为最后的章节
contents = selector.xpath('//div[@id="content"]/p/text()')
for content in contents:# 把每一段内容连接起来
chaptercontent = chaptercontent + '\n' + str(content).strip()
chaptercontent = "".join()# 去除字符串中的空行
# print(chaptercontent)
if markbook == '':# 判断是否是下载的第一章,如果是则写入书名,实际上同时把书名更改为非空,之后不写书名
markbook = bookname
print(f'\n正在爬取小说...{bookname}\n')
with open(bookname + '.txt', 'w', encoding='utf-8') as f:
f.write(f'\n\n书名:{bookname}')
f.write(f'\n\n网址:{chapterurl}\n\n\n')
if len(chaptername) != 0 and len(chaptercontent) != 0:
if markchapter == '上一章':# 注意空格
print(f'\t正在爬取...{chaptername}')
with open(bookname + '.txt', 'a+', encoding='utf-8') as f:
f.write(f'\n\n{chaptername}\n\n')
with open(bookname + '.txt', 'a+', encoding='utf-8') as f:
f.write(chaptercontent)
if nexturl[-10:] != 'index.html':# 判断是否是最后一页,按需修改
chapterurl = nexturl
# time.sleep(0.2)# 可能有反爬,如果不延迟,部分章节取不到内容
continue
else:
print('\n下载完成!\n')
break
except:
print('######异常,重试######')
print('######出错,重试######')
url='https://www.88xiaoshuo.net/'
chapturl = input(f"请输入网站({url})内选定小说开始章节内容所在页网址:")
if chapturl == '':
chapturl='https://www.88xiaoshuo.net/Partlist/47835/170601831.shtml'
start_time = time.time()
get_chaptercontent(chapterurl=chapturl)
end_time = time.time()
print(f'总耗时:{end_time-start_time:.2f}秒')
xxkoalaxx 发表于 2024-7-25 14:30
求大佬给讲讲怎么用,不太会,谢谢
运行后打开网站,选取你喜欢的小说,打开小说的开始页面(小说内容页),复制网址(如:“https://www.88xiaoshuo.net/Partlist/80415/60635846.shtml”)后粘贴到输入提示窗口回车即可。注:不输入任何内容直接回车则开始示例小说下载! 补一下这个网站的搜索api,作者大大可以继续解析了:loveliness:
url = "https://www.88xiaoshuo.net/search.html"
payload={'searchkey': '唐家三少'}
response = requests.request("POST", url,data=payload) 有用,感谢感谢 有用,非常非常感谢 感谢。有用 试用一下看看 感谢感谢,试一下看看 好东西,可以打发时间了 很强,牛啊牛{:1_921:} 好东西,可以打发时间乱 感谢大佬,试试