找回密码
  注册[Register]
查看: 519|回复: 12

[python] python爬某网站小说全部章节

[复制链接]
发表于 2022-8-13 06:02 来自手机 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

下载地址:https://yunting.lanzoul.com/ixh8W09gh8lc

[Python] 纯文本查看 复制代码
#爬取小说项目 2022年8月11日 21点46分 BY:LX
# 查看页面源代码进行分析,提取内容
# 创建协程,进行异布获取
# 下载保存文件
import asyncio
import aiohttp
import aiofiles
import time,os
import requests
from lxml import etree
def list_all_url(url):  # 获取当前页面全部文章的子链接
    while 10:
        try:
            headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49"
            }
            html = requests.get(url, headers=headers).text
            tree = etree.HTML(html)
            index_href = tree.xpath("//div[@class='zjbox']//dd/a/@href")  # 小说的链接
            return index_href
        except:
            print("下载出错了,正在重新尝试...", url)
            time.sleep(3)
 
async def down_one(url):#下载
    while 10:
        try:
            async with aiohttp.ClientSession() as session:
                async with session.get(url,headres = headers) as resp:
                    article_html = await resp.text()
                    tree = etree.HTML(article_html)
                    book_name = tree.xpath("//*[@id='main']/div[1]/span[1]/a[2]/@title")[0]#小说书名
                    book_title = tree.xpath("//*[@id='main']/h1/text()")[0].strip()#小说文章名
                    book_content = "\n".join(tree.xpath("//*[@id='content']/text()")).replace("全本小说网 www.qb5.tw,最快更新","").replace("最新章节!\n","")#文章内容
                    filename = f'{book_name}\\'  # 每个单独按小说名字存放文件夹
                    if not os.path.exists(filename):  # 判断存不存在文件夹
                        os.mkdir(filename)  # 不存在使用mkdir创建文件夹
                    os.startfile(filename)#打开下载目标的文件夹
                    async with aiofiles.open(f"{filename}{book_title}.txt", mode="w",encoding="utf-8")as f:#写入文件
                        await f.write(book_content)
                    break
        except:
            print("下载出错,正在重新请求下载......"+url)
            time.sleep(.2)
    print(book_title,"..........下载完成!")
async def download(index_href):#构造协程函数
    tasks= []
    for href in index_href:
          list_url = f"{kw}"+href # 拼接小说子链接
          t = asyncio.create_task(down_one(list_url))
          tasks.append(t)
    await asyncio.wait(tasks)
 
def mian():
    url = f"{kw}"  # 小说网址
    index_href = list_all_url(url)  # 传值url
    asyncio.run(download(index_href))  # 运行协程任务
 
if __name__ == '__main__':
    while 3:
        try:
            kw = input("例如:“ https://www.qb5.tw/book_22016/ ”\n请粘贴此网站要下载的小说网站网址【‘/’斜杠结尾,不然会出错!】【BY:lx】:")
            if not kw =="":
                mian()
            break
        except:
            print("请粘贴网址下载!")
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-8-13 06:03 | 显示全部楼层
先收藏了,万一用到呢
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 07:34 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 08:46 | 显示全部楼层
正需要,支持楼主,在大牛我只看好你!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 08:46 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 09:10 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 09:16 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 10:32 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-13 14:28 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-8-15 09:23 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-4 11:44 , Processed in 0.036639 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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