Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python爬虫实战入门】:笔趣阁小说爬取,一篇教你爬虫入门

【Python爬虫实战入门】:笔趣阁小说爬取,一篇教你爬虫入门

作者头像
爱喝兽奶的熊孩子
发布于 2024-08-06 01:16:47
发布于 2024-08-06 01:16:47
1.1K045
代码可运行
举报
文章被收录于专栏:C语言基础C语言基础
运行总次数:45
代码可运行
🚀一、爬虫需求及其目标网站

目标网站https://www.3bqg.cc/book/12257/ 需求:爬取小说章节名称及其对应的小说内容,并保存到本地,要求以章节名作为文件名。

🔥二、所需的第三方库及简介

requests

简介requests模块 官方文档https://requests.readthedocs.io/projects/cn/zh-cn/latest/

requests 是 Python 编程语言中一个常用的第三方库,它可以帮助我们向 HTTP 服务器发送各种类型的请求,并处理响应。

  • 向 Web 服务器发送 GET、POST 等请求方法;
  • 在请求中添加自定义标头(headers)、URL 参数、请求体等;
  • 自动处理 cookies;
  • 返回响应内容,并对其进行解码;
  • 处理重定向和跳转等操作;
  • 检查响应状态码以及请求所消耗的时间等信息。

BeautifulSoup

简介Beautiful Soup(bs4)

Beautiful Soup 是一个 可以从 HTML 或 XML 文件中提取数据的 Python 库。它能用你喜欢的解析器和习惯的方式实现 文档树的导航、查找、和修改。

❤️三、爬虫案例实战

打开网站

F12进入开发者模式,点击网络,刷新页面后点击搜索框,输入章节名称,就可以找到所需要的数据位于哪个数据包。

点击标头,获取请求网址以及请求方法。请求网址就是我们爬虫所需要的目标网址了,请求可以看到等会儿我们需要用get方法发送请求。

爬虫函数框架

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入模块
import requests
from bs4 import BeautifulSoup
import os
import re

# 获取网页源码
def get_html():
    pass
# 解析数据
def parse_html():
    pass
# 保存数据
def save_data():
    pass
# 主函数
def main():
    pass

第一步:获取网页源码

获取请求头信息User-Agent,HTTP请求头的一部分,用于标识发送HTTP请求的用户代理(User Agent)。它通常包含了软件应用程序或用户使用的操作系统、浏览器、版本号等信息,让服务器能够识别客户端的类型。

  • Mozilla/5.0 表示该软件是Mozilla兼容的,版本号为5.0。
  • (Windows NT 10.0; Win64; x64) 表示操作系统是Windows 10的64位版本。
  • AppleWebKit/537.36 表示浏览器使用的渲染引擎版本。
  • (KHTML, like Gecko) 是针对KHTML(KHTML是Konqueror的渲染引擎)的补充信息,表示浏览器的内核类似于Gecko。
  • Chrome/91.0.4472.124 表示浏览器和其版本号。
  • Safari/537.36 表示浏览器基于Safari的版本号。

User-Agent的信息有助于网站提供适当的内容或功能给不同类型的客户端,也可以用于统计分析和安全审计等目的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 请求头信息
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'
}
# 获取网页源码
def get_html(url):
    res = requests.get(url, headers=headers)
    print(res.text)
# 主函数
def main():
    url = 'https://www.3bqg.cc/book/12257/'
    get_html(url)
main()

第二步:数据解析 接下来我们就可以利用bs4进行数据筛选,提取。 在获取到网页源码后就可以不需要打印了,可以直接将网页源码作为返回值给返回出来,在parse_html函数中进行数据解析,提取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入模块
# 获取网页源码
def get_html(url):
    res = requests.get(url, headers=headers)
    return res.text
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')  # 实例化

可以看到,所有的章节都在dd标签里面,而所有的dd标签又在div标签里面,所以我们可以直接通过id或者class属性对div标签进行精准定位,在通过div标签找到所有包含了章节名的dd标签。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # 解析目录及其小说详情页
    tag_div = soup.find('div', class_='listmain')
    tag_dd = tag_div.find_all('dd')
    for tag in tag_dd:
        print(tag)

打印出来之后可以看到,章节名就在dd标签里面的a标签里面,只需要通过循环dd标签,在dd标签里面一个个找a标签就可以了,然后通过string属性直接获取a标签里面的文本内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入模块
import requests
from bs4 import BeautifulSoup
import os
import re
# 请求头信息
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'
}
# 获取网页源码
def get_html(url):
    res = requests.get(url, headers=headers)
    return res.text
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # 解析目录及其小说详情页
    tag_div = soup.find('div', class_='listmain')
    tag_dd = tag_div.find_all('dd')
    for tag in tag_dd:
        tag_a = tag.find('a')
        title = tag_a.string
        print(title)
# 保存数据
def save_data():
    pass
# 主函数
def main():
    url = 'https://www.3bqg.cc/book/12257/'
    html = get_html(url)
    parse_html(html)
main()

注意:在获取章节名称是有一个 <<—展开全部章节—>> 是需要去掉的,我们可以直接在循环的时候加一个判断,如果获取到的文本内容等于 <<—展开全部章节—>>就直接跳过本次循环。

另外要注意的一点就是有些章节名上会有一些特殊符号,比如 ?、*、:、"、\、/、| 等等,这些特殊符号都是无法作为文件名的,所以这里最好提前处理一下,比如用正则表达式将这些特殊字符给替换掉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # 解析目录及其小说详情页
    tag_div = soup.find('div', class_='listmain')
    tag_dd = tag_div.find_all('dd')
    for tag in tag_dd:
        tag_a = tag.find('a')
        title = tag_a.string
        if title == '<<---展开全部章节--->>':
            continue
        title = re.sub(r'[?*:"\/|]', '', title)  # 用正则表达式替换特殊字符
        print(title)

章节名称获取下来之后,接下来就是章节对应的文章内容,仔细观察后可以发现,a标签里面的href属性里面的值就是小说内容的链接的一部分,所以我们想要获取小说内容链接就只需要获取a标签里面的href属性值,在进行拼接一下就可以获取完整链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # 解析目录及其小说详情页
    tag_div = soup.find('div', class_='listmain')
    tag_dd = tag_div.find_all('dd')
    for tag in tag_dd:
        tag_a = tag.find('a')
        title = tag_a.string
        if title == '<<---展开全部章节--->>':
            continue
        href = 'https://www.3bqg.cc' + tag_a.get('href')
        print(title, href)

最后就只需要对面一个链接发送一个请求,获取源码,提取小说文本内容就可以了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
href = 'https://www.3bqg.cc' + tag_a.get('href')
html = get_html(href)
soup1 = BeautifulSoup(html, 'lxml')
tag_div1 = soup1.find('div', id='chaptercontent')
print(tag_div1)

这里获取文本内容不可以直接通过br标签获取,因为这里有些br标签里面是空的,直接通过string属性去获取文本内容会导致报错。这里可以通过stripped_strings, stripped_strings是一个生成器,用于获取去除了首尾空白字符的所有子孙节点的文本内容。将他强转成列表,在通过join方法连接即可得到小说文本内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
href = 'https://www.3bqg.cc' + tag_a.get('href')
html = get_html(href)
soup1 = BeautifulSoup(html, 'lxml')
tag_div1 = soup1.find('div', id='chaptercontent')
data = list(tag_div1.stripped_strings)
concent = '\n   '.join(data)
print(concent)

第三步:数据保存 利用Python的os模块中的mkdir来创建文件夹,注意,在创建文件夹之前一定要判断文件夹是否存在,如果存在就无法创建。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 保存数据
def save_data(title, concent):
    path = '末日乐园'
    if not os.path.exists(path):
        os.mkdir(path)
    with open(f'{path}/{title}.txt', 'w', encoding='utf-8') as f:
        f.write(concent)
    print(f'{title}章节爬取成功--------------------------------------')
🌈四、爬虫完整代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入模块
import requests
from bs4 import BeautifulSoup
import os
import re
# 请求头信息
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'
}
# 获取网页源码
def get_html(url):
    res = requests.get(url, headers=headers)
    return res.text
# 保存数据
def save_data(title, concent):
    path = '末日乐园'
    if not os.path.exists(path):
        os.mkdir(path)
    with open(f'{path}/{title}.txt', 'w', encoding='utf-8') as f:
        f.write(concent)
    print(f'{title}章节爬取成功--------------------------------------')
# 解析数据
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # 解析目录及其小说详情页
    tag_div = soup.find('div', class_='listmain')
    tag_dd = tag_div.find_all('dd')
    for tag in tag_dd:
        tag_a = tag.find('a')
        title = tag_a.string
        if title == '<<---展开全部章节--->>':
            continue
        title = re.sub(r'[?*:"\/|]', '', title)
        href = 'https://www.3bqg.cc' + tag_a.get('href')
        html = get_html(href)
        soup1 = BeautifulSoup(html, 'lxml')
        tag_div1 = soup1.find('div', id='chaptercontent')
        data = list(tag_div1.stripped_strings)
        concent = '\n   '.join(data)
        save_data(title, concent)
# 主函数
def main():
    url = 'https://www.3bqg.cc/book/12257/'
    html = get_html(url)
    parse_html(html)
main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python爬虫之爬取笔趣阁小说
为了上班摸鱼方便,今天自己写了个爬取笔趣阁小说的程序。好吧,其实就是找个目的学习python,分享一下。
python学习教程
2021/04/23
1.8K0
python爬虫之爬取笔趣阁小说
爬取一本小说的python爬虫代码
GeekLiHua
2025/01/21
4170
爬取一本小说的python爬虫代码
【Python爬虫实战入门】:全球天气信息爬取
注意:如果一段文档格式不标准,那么在不同解析器生成的 Beautiful Soup 数可能不一样。 查看 解析器之间的区别 了解更多细节。
爱喝兽奶的熊孩子
2024/05/08
9250
【Python爬虫实战入门】:全球天气信息爬取
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
在当今信息爆炸的时代,获取和处理数据的能力变得尤为重要。对于小说爱好者来说,能够快速下载并阅读自己喜欢的小说无疑是一种享受。本文将介绍如何使用Python编写一个简单的爬虫程序,从笔趣阁网站爬取小说内容,并通过多线程技术提高下载效率。
LucianaiB
2024/10/24
3100
python爬虫:爬取笔趣小说网站首页所有的小说内容,并保存到本地(单线程爬取,似乎有点慢)
这几天在进行新的内容学习,并且在尝试使用据说是全宇宙唯一一款专门开发python的ide工具,叫做pycharm。
戈贝尔光和热
2018/12/27
2.3K0
Python爬虫—爬取小说
选择的小说是你是我的城池营垒,如果要把所有章节爬取下来就要点进每一章然后去爬取,一开始觉得有点击所以要用selenium,但是写到后面发现传每一章的url就可以不用模拟点击,所以可以不用selenium来实现用requests也可以。
SakuraTears
2022/01/13
7840
Python爬虫—爬取小说
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
在当今信息爆炸的时代,获取和处理数据的能力变得尤为重要。对于小说爱好者来说,能够快速下载并阅读自己喜欢的小说无疑是一种享受。本文将介绍如何使用Python编写一个简单的爬虫程序,从笔趣阁网站爬取小说内容,并通过多线程技术提高下载效率。
LucianaiB
2024/12/25
3400
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
python用BeautifulSoup库简单爬虫入门+案例(爬取妹子图)
(adsbygoogle = window.adsbygoogle || []).push({});
双面人
2019/04/10
1.6K0
手把手带你Python爬虫 | 爬取起点小说网
用python爬取一本仙侠类的小说下载并保存为txt文件到本地。本例为“大周仙吏”。
快学Python
2021/08/09
3.9K0
爬虫实战:从网页到本地,如何轻松实现小说离线阅读
今天我们将继续进行爬虫实战,除了常规的网页数据抓取外,我们还将引入一个全新的下载功能。具体而言,我们的主要任务是爬取小说内容,并实现将其下载到本地的操作,以便后续能够进行离线阅读。
努力的小雨
2024/03/12
6270
Python爬虫实战——爬取小说
按F12或鼠标右键检查,使用选取页面元素的工具定位各个章节的位置,并且查看对应的链接。
吉吉的机器学习乐园
2022/07/13
3.1K0
Python爬虫实战——爬取小说
python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)
思路 之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以
kalifa_lau
2018/04/26
1.4K0
python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)
python爬虫之——爬取煎蛋网图片
事先声明:本人之前并没有听说过什么煎蛋网,代码学习来自其他网站,仅供学习使用。 import requests import os import time from bs4 import BeautifulSoup # 发出请求获得HTML源码 def get_html(url): # 指定一个浏览器头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.3
种花家的奋斗兔
2020/11/13
5740
Python3网络爬虫快速入门实战解析
强烈建议:请在电脑的陪同下,阅读本文。本文以实战为主,阅读过程如稍有不适,还望多加练习。
圆方圆PYTHON学院
2018/12/23
2.2K1
Python3网络爬虫快速入门实战解析
python3网络爬虫(抓取文字信息)
本文章是下文链接的学习笔记: 一小时入门python3网络爬虫 原文笔记是在winows下进行的,本文是在ubuntu下进行的所有操作. 爬虫的大概思路其实就两点: 获取网页的HTML信息 解析HTML信息,提取我们真正需要的内容 一 前言 二 网络爬虫简介 1.审查元素 chrome:F12 2.简单实例 网络爬虫根据提供的URL信息,获取网页的HTML信息. 在Python\3中使用request和urllib.request来获取网页的具体信息. urllib库Python内置,无需额
青木
2018/05/28
7.2K0
python下载奇书网的小说
网址为,奇书网 以前下载小说是爬取所有的章节,提取文章,构成小说,那样太慢,一本小说几千章节,好久才能下载一本, 现在找到一个有TXT下载的地方,直接读写文章了. 图片.png 准备按照首
热心的社会主义接班人
2018/06/19
1.2K0
Python3网络爬虫快速入门实战解析
本文通过分析Python的第三方库,总结了一些实用的Python第三方库,包括使用正则表达式进行字符串处理、使用Pandas进行数据分析、使用Matplotlib进行数据可视化、使用Requests进行网页抓取、使用BeautifulSoup进行网页解析、使用Scrapy进行爬虫开发、使用TensorFlow进行深度学习等。这些库在工作和学习中都非常实用,可以帮助我们提高工作效率和学习效果。
Jack_Cui
2018/01/08
4.3K0
Python3网络爬虫快速入门实战解析
用 Python 爬取小说
Python 爬取网络的内容是非常方便的,但是在使用之前,要有一些前端的知识,比如: HTML、 CSS、XPath 等知识,再会一点点 Python 的内容就可以了。
zucchiniy
2019/10/30
1.5K0
爬取小说案例-BeautifulSoup教学篇
当我们进行爬取各种资源,拿到源码进行解析数据的时候,会用到各种解析方式,本文介绍的爬取小说的一个案例,使用比较受欢迎的python第三方库BeautifuSoup来进行解析数据。
laity
2024/12/22
2320
爬取小说案例-BeautifulSoup教学篇
Spider实战系列-爬取鬼吹灯小说
第一次发表实战类型的爬虫文章,如果有那里不明白或者出现bug的可以找我私信,欢迎大家在下面评论,可以给出我更好的建议,欢迎大家指正.
浅辄
2023/03/02
8610
Spider实战系列-爬取鬼吹灯小说
推荐阅读
相关推荐
python爬虫之爬取笔趣阁小说
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验