Python爬取笔趣阁小说:从单章到整本,新手也能轻松搞定 1. 准备工作搭建Python爬虫环境第一次接触Python爬虫时我也被各种专业术语吓到过。但实际操作起来你会发现这比想象中简单得多。就像组装乐高积木只要把几个关键部件拼在一起就能运行。我们先来准备最基础的三样工具Python解释器这是运行所有代码的引擎。推荐安装最新稳定版目前是3.10安装时记得勾选Add Python to PATH选项这样能在命令行直接调用python命令。我遇到过不少新手因为漏选这个选项导致后续各种报错。代码编辑器VS Code或PyCharm都不错。个人更推荐VS Code轻量且插件丰富安装Python扩展后还能直接调试代码。记得配置好中文界面和代码自动补全这对新手特别友好。必备库安装打开命令行Windows用cmdMac用Terminal逐行执行以下命令pip install requests beautifulsoup4 lxml这里requests用来获取网页内容beautifulsoup4负责解析HTMLlxml则是解析引擎。如果下载速度慢可以加上国内镜像源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests beautifulsoup4 lxml提示遇到SSL证书错误时可以尝试在命令后添加--trusted-host pypi.tuna.tsinghua.edu.cn2. 单章爬取实战解剖小说网页结构让我们用《斗破苍穹》第一章做实验URL示例https://www.biqg.cc/book/6909/1.html。打开这个链接后按F12进入开发者工具你会看到密密麻麻的HTML代码——别慌我们只需要关注两个关键信息章节标题通常在h1标签内可以用正则表达式rh1 classwap_none(.*?)/h1提取正文内容往往藏在div idchaptercontent这样的容器里用BeautifulSoup的find方法就能精准定位这是我调试多次后优化的代码模板import requests from bs4 import BeautifulSoup import re headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } def get_single_chapter(url): response requests.get(url, headersheaders) response.encoding utf-8 # 解决中文乱码的关键 soup BeautifulSoup(response.text, html.parser) title soup.find(h1, class_wap_none).get_text() content soup.find(div, idchaptercontent).get_text(\n) # 清理广告文本 content content.replace(请收藏本站https://www.biqg.cc, ) return title, content.strip()实测时会发现几个常见坑点乱码问题90%的乱码都是编码设置不对记得response.encoding要设为utf-8请求被拒加上User-Agent头模拟浏览器访问内容错位不同网站结构可能微调需要适时修改选择器3. 整本爬取发现URL规律与自动化爬完单章后观察《斗破苍穹》前几章URLhttps://www.biqg.cc/book/6909/1.html https://www.biqg.cc/book/6909/2.html https://www.biqg.cc/book/6909/3.html明显规律是/book/小说ID/章节号.html。利用这个规律我们可以用for循环批量爬取。但要注意三个优化点间隔请求用time.sleep(1)在每个请求间暂停1秒避免被封IP异常处理用try-catch包裹请求代码跳过失效章节进度显示用print(f正在爬取第{i}章)让运行过程可视化改进后的批量爬取代码import time def get_full_novel(novel_id, start1, end10): with open(斗破苍穹.txt, w, encodingutf-8) as f: for i in range(start, end1): try: url fhttps://www.biqg.cc/book/{novel_id}/{i}.html title, content get_single_chapter(url) f.write(f\n\n{title}\n\n{content}) print(f成功爬取: {title}) time.sleep(1) except Exception as e: print(f第{i}章爬取失败: {str(e)}) continue4. 高级技巧突破反爬与内容优化当爬取量较大时可能会触发网站的反爬机制。根据我的实战经验这些方法最有效动态User-Agent准备多个浏览器标识随机切换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/605.1.15 ] headers[User-Agent] random.choice(user_agents)代理IP池当IP被封时自动切换需自行准备代理IP列表proxies { http: http://123.123.123.123:8888, https: http://123.123.123.123:8888 } response requests.get(url, headersheaders, proxiesproxies)内容清洗用正则表达式过滤广告和特殊字符import re clean_content re.sub(r[\u3000\xa0\u200b], , content) # 去除特殊空白符对于超长篇小说如1000章建议分卷保存并添加断点续爬功能。可以记录已爬取的章节号到json文件下次运行时自动跳过import json # 保存进度 progress {last_chapter: 50} with open(progress.json, w) as f: json.dump(progress, f) # 读取进度 with open(progress.json) as f: progress json.load(f) start_chapter progress[last_chapter] 1最后分享一个实用技巧用多线程加速爬取适合章节数多的小说。但要注意控制并发数建议不超过5个线程from concurrent.futures import ThreadPoolExecutor def crawl_chapter(chapter_id): # 爬取单章的实现代码... with ThreadPoolExecutor(max_workers5) as executor: executor.map(crawl_chapter, range(1, 1001))记得小说爬取后要合理使用尊重版权。这套方法同样适用于其他内容型网站的数据采集只需调整选择器和URL规则即可。刚开始可能会遇到各种报错但每个错误都是学习机会——我最初写爬虫时光是解决SSL验证错误就花了整整一下午现在回头看那些踩过的坑都成了宝贵经验。