吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1708|回复: 52
上一主题 下一主题
收起左侧

[Python 原创] 爬取88小说网小说的源代码

  [复制链接]
跳转到指定楼层
楼主
pnnhnjh 发表于 2024-7-25 11:17 回帖奖励
本帖最后由 pnnhnjh 于 2024-7-25 14:45 编辑

简单的网站小说爬取程序(通过直接模拟点击下一章、下一页等元素获取相应链接,简单修改就可以下载别的网站的小说),运行后打开网站,选取你喜欢的小说,打开小说的开始页面(小说内容页),复制网址(如:“https://www.88xiaoshuo.net/Partlist/80415/60635846.shtml”)后粘贴到输入提示窗口回车即可。注:不输入任何内容直接回车则开始示例小说下载!

[Python] 纯文本查看 复制代码
#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()')[0]
            chaptername = selector.xpath('//div[@class="zhangjieming"]/h1/text()')[0]  # 章节名称
            chaptername = re.sub(r'\d{1,5}\.', '', chaptername)  # 去掉里面数字开头,点号结尾的数字
            # mainurl=selector.xpath('//a[text()="章节目录"]/@href')[0]
            mainurl=f'{url[:-1]}'
            try:
                ###mark用于判断是否是要写章节名称,如果值是上一章,表示换章节要写章节名称,nexturl配合mainurl用于判断是否是最后页
                markchapter = selector.xpath('//a[text()="上一章" or text()="上一页"]/text()')[0]  # 注意空格
            except:
                markchapter = '上一章'  # 出现异常,即不存在上一章,赋值为目录页的网址供后面检测为最后的章节  # 注意空格
            try:
                nexturl = selector.xpath('//a[text()="下一章" or text()="下一页"]/@href')[0]  # 注意空格
                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([s for s in chaptercontent.splitlines(True) if s.strip()])  # 去除字符串中的空行
            # 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}秒')

免费评分

参与人数 10吾爱币 +16 热心值 +10 收起 理由
test0421 + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
O2H2O + 1 + 1 谢谢@Thanks!
laozhang4201 + 1 + 1 热心回复!
FitContent + 1 + 1 我很赞同!
suwenone + 1 + 1 我很赞同!
hshcompass + 1 + 1 热心回复!
zhijieweiwo + 1 + 1 用心讨论,共获提升!
Julewim + 1 + 1 我很赞同!
JUNWO999 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| pnnhnjh 发表于 2024-7-25 14:46 |楼主
xxkoalaxx 发表于 2024-7-25 14:30
求大佬给讲讲怎么用,不太会,谢谢

运行后打开网站,选取你喜欢的小说,打开小说的开始页面(小说内容页),复制网址(如:“https://www.88xiaoshuo.net/Partlist/80415/60635846.shtml”)后粘贴到输入提示窗口回车即可。注:不输入任何内容直接回车则开始示例小说下载!
推荐
qianjue 发表于 2024-7-25 19:30
补一下这个网站的搜索api,作者大大可以继续解析了

url = "https://www.88xiaoshuo.net/search.html"

payload={'searchkey': '唐家三少'}

response = requests.request("POST", url,  data=payload)
沙发
zzhh16 发表于 2024-7-25 12:58
3#
langlai 发表于 2024-7-25 13:04
有用,非常非常感谢
4#
lulice2012 发表于 2024-7-25 13:05
感谢。有用
5#
起点孤儿院 发表于 2024-7-25 13:06
试用一下看看
6#
haishao0218 发表于 2024-7-25 13:08
感谢感谢,试一下看看
7#
gaohui000 发表于 2024-7-25 13:15
好东西,可以打发时间了
8#
Cxcj 发表于 2024-7-25 13:15
很强,牛啊牛
9#
lxyi 发表于 2024-7-25 13:31
好东西,可以打发时间乱
10#
badougq 发表于 2024-7-25 13:35
感谢大佬,试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 16:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表