抓取小说

立山  论坛元老 | 2025-3-27 17:34:50 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1868|帖子 1868|积分 5604

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
思绪:

  • 解析小说HTML解构,抓取主要元素(例如:小说目次元素及小说内容元素)
  • 抓取小说目次及链接,将链接合并生成详细章节的链接(为避免对网站造成压力,仅爬取前几章)
  • 运行代码抓取所有小说内容
  1. # 导入requests库,用于发送HTTP请求
  2. import requests
  3. # 导入BeautifulSoup类,用于解析HTML和XML文档
  4. from bs4 import BeautifulSoup
  5. # 定义要爬取的小说目录页URL
  6. url = 'https://www.biqu04.cc/book/46176/'
  7. # 定义请求头,模拟浏览器访问
  8. headers = {
  9.     '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'
  10. }
  11. try:
  12.     # 发送HTTP GET请求到指定URL,并传入请求头
  13.     response = requests.get(url, headers=headers)
  14.     # 检查请求是否成功,如果不成功则抛出异常
  15.     response.raise_for_status()
  16.    
  17.     # 使用BeautifulSoup解析响应的HTML内容
  18.     soup = BeautifulSoup(response.text, 'html.parser')
  19.     # 查找class为'listmain'的div元素
  20.     listmain_div = soup.find('div', class_='listmain')
  21.    
  22.     # 初始化一个空列表,用于存储提取的链接信息
  23.     links = []
  24.     # 检查是否找到了'listmain' div元素
  25.     if listmain_div:
  26.         # 遍历'listmain' div元素下的所有a标签
  27.         for a_tag in listmain_div.find_all('a'):
  28.             # 获取a标签的href属性值
  29.             href = a_tag.get('href')
  30.             # 当遇到目标链接时,停止采集
  31.             if href == '/book/46176/20.html':
  32.                 # 将目标链接的文本和href信息添加到links列表中
  33.                 links.append({
  34.                     'text': a_tag.get_text(strip=True),
  35.                     'href': href
  36.                 })
  37.                 # 跳出循环
  38.                 break
  39.             # 创建一个字典,包含链接的文本和href信息
  40.             link = {
  41.                 'text': a_tag.get_text(strip=True),
  42.                 'href': href
  43.             }
  44.             # 将链接信息添加到links列表中
  45.             links.append(link)
  46.    
  47.     # 遍历所有提取的链接
  48.     for link in links:
  49.         # 拼接完整的章节URL
  50.         full_url = f"https://www.biqu04.cc{link['href']}"
  51.         try:
  52.             # 发送HTTP GET请求到章节URL,并传入请求头
  53.             chapter_response = requests.get(full_url, headers=headers)
  54.             # 检查请求是否成功,如果不成功则抛出异常
  55.             chapter_response.raise_for_status()
  56.             # 使用BeautifulSoup解析章节页面的HTML内容
  57.             chapter_soup = BeautifulSoup(chapter_response.text, 'html.parser')
  58.             # 查找class为'Readarea ReadAjax_content'的div元素,即章节内容区域
  59.             content_div = chapter_soup.find('div', class_='Readarea ReadAjax_content')
  60.             # 检查是否找到了章节内容区域
  61.             if content_div:
  62.                 # 打印章节标题
  63.                 print(f"\n=== 章节:{link['text']} ===")
  64.                 # 打印章节内容,去除首尾空白字符
  65.                 print(content_div.get_text(strip=True))
  66.         except Exception as e:
  67.             # 打印抓取章节失败的信息和错误原因
  68.             print(f"抓取章节失败:{link['text']},错误:{e}")
  69. except requests.exceptions.RequestException as e:
  70.     # 打印请求失败的信息和错误原因
  71.     print(f"请求失败: {e}")
  72. except Exception as e:
  73.     # 打印发生其他错误的信息和错误原因
  74.     print(f"发生错误: {e}")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表