笔趣阁斗罗大陆小说爬取

import requests
from lxml import etree
import time  # 用于控制请求间隔

# 初始链接
url = 'https://www.biqooge.com/13_13515/8585526.html'

# 使用 'with open' 语句打开文件进行追加写入
with open('斗罗大陆.txt', 'a', encoding='utf-8') as f:  # 使用 'a' 模式以追加内容
    while True:
        # 伪装自己
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
        }

        try:
            session = requests.Session()
            response = session.get(url, headers=headers)
            response.raise_for_status()  # 检查请求是否成功
            response.encoding = "gbk"

            # 解析内容
            e = etree.HTML(response.text)
            info = e.xpath('//div[@id="content"]/text()')
            title = e.xpath('//div[@class="bookname"]/h1/text()')
            next_url = e.xpath('//a[text()="下一章"]/@href')  # 提取下一章节的链接

            # 清理文本
            title = title[0].strip() if title else '无标题'
            info = ''.join([text.strip() for text in info]).replace('\r\n', '\n')

            print(title)
            print(info)

            # 写入内容
            f.write(title + '\n\n' + info + '\n\n')

            # 如果有下一章节,则继续
            if next_url:
                url = 'https://www.biqooge.com' + next_url[0]  # 拼接基本 URL
            else:
                print("没有更多章节了。")
                break  # 退出循环

            time.sleep(1)  # 控制请求间隔,避免过于频繁

        except requests.exceptions.RequestException as req_err:
            print(f"请求错误: {req_err}")
            break  # 发生请求错误时退出循环
        except Exception as e:
            print(f"其他错误: {e}")
            break  # 发生其他错误时退出循环

# 不需要再额外打开文件保存内容
 

  1. 使用 with open('斗罗大陆.txt', 'a', encoding='utf-8') as f: 语句可以确保文件在写入后自动关闭。以 'a' 模式打开文件允许追加内容,而不会覆盖原有内容。

  2. 文件内容保存:每次成功提取章节后,标题和内容都会追加到 斗罗大陆.txt 文件中。

  3. 异常处理:在请求或解析过程中捕获任何异常,以确保程序的健壮性。

  4. 请求间隔:使用 time.sleep(1) 控制请求频率,避免对目标网站造成过大负担。

  5. 简化了异常处理:将文件写入的异常处理移除,因为只需在 with 块内进行一次写入。
  6. 移除冗余的文件打开操作:代码最后不需要再次打开文件来保存内容。
  7. 清晰的循环结构:确保了异常处理和逻辑流的清晰,避免了多重嵌套的情况。
  8. 保持写入逻辑f.write() 调用的位置保持在 try 块内,这样可以确保写入成功后才进行下一步。
  9. 测试代码确保在运行此代码时已经安装了必要的库(requestslxml)。可以通过以下命令安装:pip install requests lxml

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值