找回密码
  注册[Register]
查看: 586|回复: 15

[python] python协程爬取笔趣阁小说

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

vdz4IJ.png

最近在学习python爬虫的协程部分,所以拿一个小说网站来练手。
首先使用同步爬取抓取小说章节所有的url,然后用异步的方法来保存小说内容。以txt文件保存。
食用方法

python环境为 python 3.9
用到的库有requests,BeautifulSoup,asyncio,aiohttp,aiofiles,使用源码要先安装库
遇到的问题
小说一共有1400+章节,但是每次爬取都只能爬1200+左右,估计是timeout。
代码贴出
[Python] 纯文本查看 复制代码
import requests
from bs4 import BeautifulSoup
import asyncio
import aiohttp
import aiofiles

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    'Referer': 'http://www.biqugse.com',
    "Accept-Encoding": "gzip, deflate"
}

async def get_content(xs_url, name):
    async with aiohttp.ClientSession() as session:
        async with session.get(xs_url, headers=headers) as resp:
            response = await resp.content.read()
            soup = BeautifulSoup(response, "html.parser")
            content = soup.find("div", id="content")
            data = content.text.split()
            data = "\r\n".join(data)
            async with aiofiles.open(f"novel/{name}.txt", mode="a", encoding="utf-8") as f:
                await f.write(data)
            print(f"已经下载{name}")



async def main(url):
    resp = requests.get(url)

    soup = BeautifulSoup(resp.text, "html.parser").find("div", attrs={"id": "list"}).find_all("dd")[9:]

    tasks = []
    print("开始创建异步任务")
    for i in soup:
        xs_url = url.rstrip("/25802/") + i.find("a").get("href")
        name = i.find("a").text
        print(xs_url,name)
        tasks.append(asyncio.create_task(get_content(xs_url, name),name=name))
    await asyncio.wait(tasks)

    print("结束异步任务")


if __name__ == '__main__':
    print("开始执行")

    main_url = "http://www.biqugse.com/25802/"
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(main_url))




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

使用道具 举报

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

使用道具 举报

发表于 2022-8-20 17:20 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2022-8-20 20:52 | 显示全部楼层
尊重原创者,更尊重搬运者,辛苦了
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 10:14 , Processed in 0.043512 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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