当前位置:首页>python>Python爬虫:抓取全网小说只需50行代码,白嫖党终于有救了!

Python爬虫:抓取全网小说只需50行代码,白嫖党终于有救了!

  • 2026-10-11 08:26:26
Python爬虫:抓取全网小说只需50行代码,白嫖党终于有救了!

兄弟们,还在为追更烦恼?这波操作让你实现小说自由

各位老少爷们儿们好啊。

不知道你们有没有这种感觉——看到一半的小说突然要付费,或者网站直接凉了,那叫一个难受。昨晚我失眠了,突发奇想写了个小说爬虫,结果一发不可收拾。

今天就把这个神器分享给大家,白嫖党的福音来了。

先聊聊原理,别急着敲代码

很多人觉得爬虫多神秘,其实说白了就是三步走:

  1. 假装浏览器访问网站
  2. 把HTML里的内容扒出来
  3. 存到本地慢慢看

就这。没听错,就是这么简单粗暴。

核心代码来了,50行都嫌多

import requests
from bs4 import BeautifulSoup
import re
import os
import time

classNovelCrawler:
def__init__(self, headers=None):
        self.headers = headers or {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        self.session = requests.Session()

defget_chapter_content(self, url):
        resp = self.session.get(url, headers=self.headers, timeout=10)
        resp.encoding = 'utf-8'
        soup = BeautifulSoup(resp.text, 'html.parser')

        content = soup.select_one('
#content, .chapter-content, .book-content')
if content:
return content.get_text(strip=True, separator='\n')
returnNone

defget_chapter_list(self, catalog_url):
        resp = self.session.get(catalog_url, headers=self.headers, timeout=10)
        resp.encoding = 'utf-8'
        soup = BeautifulSoup(resp.text, 'html.parser')

        links = soup.select('a[href*="/chapter"], a[href*="/read"]')
return [(link.get_text(strip=True), link['href']) for link in links]

defsave_novel(self, title, chapters):
        os.makedirs('novels', exist_ok=True)
        filename = f'novels/{re.sub(r"[^\w\s]", "", title)}.txt'

with open(filename, 'w', encoding='utf-8') as f:
            f.write(f"{title}\n{'='*50}\n\n")
for i, (name, content) in enumerate(chapters, 1):
                f.write(f"第{i}章 {name}\n\n{content}\n\n")
if i % 10 == 0:
                    print(f"已保存 {i} 章...")
return filename

defcrawl(self, catalog_url, start=0, end=None):
        print("正在获取章节列表...")
        chapters = self.get_chapter_list(catalog_url)[start:end]
        print(f"共找到 {len(chapters)} 章,开始抓取...")

        results = []
for i, (name, url) in enumerate(chapters):
            content = self.get_chapter_content(url)
if content:
                results.append((name, content))
                print(f"第{i+1}章: {name}")
            time.sleep(0.5)

        title = f"小说_{int(time.time())}"
return self.save_novel(title, results)

用起来有多爽?来看看实战效果

crawler = NovelCrawler()

url = "https://example.com/novel/12345/catalog"
filepath = crawler.crawl(url, start=0, end=100)

print(f"小说已保存到: {filepath}")

输出大概是这样的:

正在获取章节列表...
共找到 100 章,开始抓取...
第1章: 第一章 穿越了
第2章: 第二章 系统激活
第3章: 第三章 走上人生巅峰
...
小说已保存到: novels/小说_1234567890.txt

看到没。全自动一条龙服务。

反爬套路深?教你几招保命

网站不是傻子,人家也要活下去。所以遇到反爬很正常,别慌。

# 招数1:随机UA
import random

USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36...',
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15...',
]

defget_random_headers():
return {'User-Agent': random.choice(USER_AGENTS)}

# 招数2:代理IP池
proxies = {
'http': 'http://user:pass@proxy.com:8080',
'https': 'https://user:pass@proxy.com:8080'
}

# 招数3:Cookie绕过
cookies = {'session_id': 'xxxxx'}

混子哥的忠言逆耳

法律风险说三遍:

  1. 爬取有版权的内容用于商业用途,等着吃官司吧
  2. 爬太快把人家网站搞瘫了,这不叫本事叫犯罪
  3. 最好只爬公版资源或者自己付费购买的内容

我一直的理念是——技术无罪,但用法有道。用技术来学习研究没问题,拿去干坏事就呵呵了。

还想进阶?给你指条路

第一层:BeautifulSoup够用了,新手友好 第二层:Scrapy框架了解一下,专业的爬虫框架 第三层:Selenium配合浏览器,JS渲染的页面也能爬 第四层:分布式爬虫集群,大爷级别玩家的选择

总结

技能
难度
适用场景
requests + bs4
一星
80%的网站
Scrapy
三星
规模化爬取
Selenium
二星
JS渲染站
分布式集群
五星
爬虫老司机

好了,今天的分享就到这里。技术是用来解决问题的,不是用来作恶的。各位且爬且珍惜。

我是混子哥,我们下期见。

最新文章

随机文章