网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Python >

抓取小说

时间:2025-03-27 18:49

人气:

作者:admin

标签:

导读:思路: 解析小说HTML解构,抓取主要元素(例如:小说目录元素及小说内容元素) 抓取小说目录及链接,将链接合并生成具体章节的链接(为避免对网站造成压力,仅爬取前几章) 运行...

思路:

  1. 解析小说HTML解构,抓取主要元素(例如:小说目录元素及小说内容元素)
  2. 抓取小说目录及链接,将链接合并生成具体章节的链接(为避免对网站造成压力,仅爬取前几章)
  3. 运行代码抓取所有小说内容
# 导入requests库,用于发送HTTP请求
import requests
# 导入BeautifulSoup类,用于解析HTML和XML文档
from bs4 import BeautifulSoup

# 定义要爬取的小说目录页URL
url = 'https://www.biqu04.cc/book/46176/'
# 定义请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

try:
    # 发送HTTP GET请求到指定URL,并传入请求头
    response = requests.get(url, headers=headers)
    # 检查请求是否成功,如果不成功则抛出异常
    response.raise_for_status()
    
    # 使用BeautifulSoup解析响应的HTML内容
    soup = BeautifulSoup(response.text, 'html.parser')
    # 查找class为'listmain'的div元素
    listmain_div = soup.find('div', class_='listmain')
    
    # 初始化一个空列表,用于存储提取的链接信息
    links = []
    # 检查是否找到了'listmain' div元素
    if listmain_div:
        # 遍历'listmain' div元素下的所有a标签
        for a_tag in listmain_div.find_all('a'):
            # 获取a标签的href属性值
            href = a_tag.get('href')
            # 当遇到目标链接时,停止采集
            if href == '/book/46176/20.html':
                # 将目标链接的文本和href信息添加到links列表中
                links.append({
                    'text': a_tag.get_text(strip=True),
                    'href': href
                })
                # 跳出循环
                break
            # 创建一个字典,包含链接的文本和href信息
            link = {
                'text': a_tag.get_text(strip=True),
                'href': href
            }
            # 将链接信息添加到links列表中
            links.append(link)
    
    # 遍历所有提取的链接
    for link in links:
        # 拼接完整的章节URL
        full_url = f"https://www.biqu04.cc{link['href']}"
        try:
            # 发送HTTP GET请求到章节URL,并传入请求头
            chapter_response = requests.get(full_url, headers=headers)
            # 检查请求是否成功,如果不成功则抛出异常
            chapter_response.raise_for_status()
            # 使用BeautifulSoup解析章节页面的HTML内容
            chapter_soup = BeautifulSoup(chapter_response.text, 'html.parser')
            # 查找class为'Readarea ReadAjax_content'的div元素,即章节内容区域
            content_div = chapter_soup.find('div', class_='Readarea ReadAjax_content')
            # 检查是否找到了章节内容区域
            if content_div:
                # 打印章节标题
                print(f"\n=== 章节:{link['text']} ===")
                # 打印章节内容,去除首尾空白字符
                print(content_div.get_text(strip=True))
        except Exception as e:
            # 打印抓取章节失败的信息和错误原因
            print(f"抓取章节失败:{link['text']},错误:{e}")

except requests.exceptions.RequestException as e:
    # 打印请求失败的信息和错误原因
    print(f"请求失败: {e}")
except Exception as e:
    # 打印发生其他错误的信息和错误原因
    print(f"发生错误: {e}")
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信