python使用bs模块爬取小说数据

news2024/11/27 22:30:59

目录

一、BS模块介绍        

二、分析页面架构

三、代码实现

四、结果展示

五、总结思路


一、BS模块介绍        

        Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

详细的BS模块介绍(参考网友):

Python中BeautifulSoup库的用法_阎_松的博客-CSDN博客_python beautifulsoup

业务需求:通过BS模块来抓取某小说里面的数据内容

二、分析页面架构

        通过bs模块可以抓取到网站源代码的数据,然后分析抓取网站代码架构。首先可以看到网站每一章的标签都是div class="book-mulu"标签下面,只要搜索到标签值就可以抓到里面数据。

         第二是内容的url是藏在a href标签里面的数据, 每个章节的sanguoyanyi/x.html来代替,x是章节数。通过一个for循环可以把数据赋值到每个列表中,在通过get方法抓取每个url中的内容,刚好每个章节的内容藏在chapter_content的标签下面,用select模块就可以抓到标签下面内容。

 三、代码实现

        每个代码详细功能写在注释里面了,不懂留言沟通。

# -*- coding:UTF-8 -*-
import requests
import json
from bs4 import BeautifulSoup
import cchardet#字符编码格式化模块包
if __name__ == "__main__":
    #浏览器请求标识符
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
    #爬取url的地址
    url='http://www.shicimingju.com/book/sanguoyanyi.html'
    #使用requests方法抓取书
    page_test = requests.get(url=url,headers=headers)
    #用cchardet的detect方法将content编码化
    page_test_coding = cchardet.detect(page_test.content)['encoding']
    #print(page_test.content.decode(page_test_coding))
    #给一个变量赋值到抓取下来的内容
    new_page_test = page_test.content.decode(page_test_coding)
    #使用bs模块的lxml方法进行解析
    soup = BeautifulSoup(new_page_test,'lxml')
    # print(soup)
    #用select方法搜索book-mulu标签下ul标签下li标签
    li_list= soup.select('.book-mulu > ul > li')
    #新建对象保存
    fp = open('./sanguo.txt','w',encoding='utf-8')
    for li in li_list:
        #标题用string字符串保存
        title = li.a.string
        #内容方面的url
        detail_url = 'http://www.shicimingju.com'+li.a['href']
        #继续抓取内容url的赋值
        detai_page_text = requests.get(url=detail_url,headers=headers).content
        #创建对象,括号中的参数是html文档(可以打开外部存储html文档的文件BeautifulSoup(open("index.html")),或者直接使用当前文件中的html字符串对象)和解析器名称
        detail_soup = BeautifulSoup(detai_page_text,'lxml')
        #查找标签chapter_content的内容
        div_tag = detail_soup.find('div',class_='chapter_content')
        #将内容使用text方法赋予新对象
        content = div_tag.text
        #写入文本中title和content加换行符
        fp.write(title+':'+content+'\n')
        #打印爬取结果
        print(title,'爬取成功!')

四、结果展示

        编译结果显示正常,每个章节都抓取到了数据。

 查看保存的text文档

​​​​​​​

 五、总结思路

        requests抓取下来的数据是有带.content或者.text标签的数据,尝试了很多用.text标签抓下来的数据是乱码。后面怎么用utf-8格式变通都不行,原来response.text这个是str的数据(unicode),是requests库将response.content进行解码后的字符串。(而我们在解码的时候需要指定一个编码方式,requests在进行自动解码的时候需要猜测编码的方式,所以避免不了判断失误,就会导致解码产生乱码.)后面用content就可以行的通了。为了以防万一,使用cchardet模块来解决编码问题。Python requests乱码的五种解决办法_小龙在山东的博客-CSDN博客_python requests 乱码)

参考文献:

Python中BeautifulSoup库的用法_阎_松的博客-CSDN博客_python beautifulsoup

requests.text和requests.content的区别_、Lu的博客-CSDN博客_requests.text

Python requests乱码的五种解决办法_小龙在山东的博客-CSDN博客_python requests 乱码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云计算与大数据技术】Hadoop MapReduce的讲解(图文解释,超详细必看)

一、Hadoop MapReduce架构 MapReduce 是一种分布式计算框架,能够处理大量数据 ,并提供容错 、可靠等功能 , 运行部署在大规模计算集群中,MapReduce计算框架采用主从架构,由 Client、JobTracker、TaskTracker组成 Client的作用 用户编写 MapReduce程序…

Debye-Wolf积分计算器

摘要 众所周知,Debye-Wolf积分可用于以半解析方式计算焦平面附近的矢量场。Debye-Wolf积分通常用作分析高数值孔径显微镜成像情况的基本工具。它是基于理想模型,因此不需要待求镜头精确规格的知识。该用例将解释如何在VirtualLab Fusion中使用Debye-Wolf…

Guitar Pro8更新了多达30项功能优化

很多人在听到Guitar Pro这个名词时,本能反应就是跟吉他有关的软件吧,但是具体是什么样子,有什么功能我们却不一定知道的那么详细,下面呢,我们就来详细的介绍下Guitar Pro这款软件。 Guitar Pro是初学作曲,特…

openlayers百万级和千万级数据量的矢量切片在渲染过程中的技术难点解析

目录1 前言2 数据介绍3 切片方案及技术难点3.1 大数据量图层矢量切片无法正确返回结果3.2 矢量切片标注过程中标注拥挤3.3 矢量切片每一块切片都进行了标注,形成了冗余3.4 矢量切片标注的随机性会造成时而在中央,时而在边界上3.5 特殊样式的制作3.6 图层…

Jmeter(九):jmeter_逻辑控制器_事务控制器HTTP Cookie管理器

Jmeter(19):jmeter_逻辑控制器_事务控制器 事务: 性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次 筛选条件查询,一次支付等;技术上讲:事务就是由1个或多个…

C# Spire.Xls将DataTable导出到Excel并加密

背景需求: 页面展示信息列表,需要将数据导出到Excel并加密sheet文件和工作簿结构。 代码思路:1.将数据转换为dataTable,2.将dataTable导出到Excel,3.处理加密。 文章目录引入必要的dll文件1.将数据转换为DataTable2.将…

Python英文词频统计(哈姆雷特)程序示例

今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本——《哈姆雷特》进行分词。 一、英文文本词频统计思路 想要对《哈姆雷特》进行英文单词词频统计,那么我们首先需要拿到《哈姆雷特》的原文&a…

“笨鸟”逆风飞:一场荣耀的高端越峰征程

2020年的11月17日,荣耀被迫“成年”。 “那一天都是在忙碌过程中度过的,有很多人要去沟通,有很多资产的分割……”,在12月12日央视网财经的访谈节目《云顶对话》中,荣耀CEO赵明首次向外袒露心迹,转身成为对…

C++11标准模板(STL)- 算法(std::max)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回各给定值中的较大者 …

构建供销一体化电商交易体系,数商云S2B2B系统实现锂电池企业全面转型升级

近年来&#xff0c;得益于新能源汽车和储能产业的快速发展&#xff0c;相关支撑技术和产业也得到空前关注&#xff0c;锂电池就是其中一员。我国动力电池装机量达到92GWH&#xff0c;同比增长169%&#xff0c;超过全球平均增速&#xff0c;占据着全球近一半的电池装机量。 新能…

Qt 蓝牙库基础

1.目的 使用QT自带的蓝牙功能库进行学习开发&#xff0c;了解蓝牙设备的工作原理和使用流程&#xff0c;目的搭建可以自由控制的蓝牙app&#xff0c;为以后的学习生活做基础。 2.本地设备 采用自己vivo Y53的手机作为实验对象。 使用到的QT蓝牙库的类名&#xff1a; QBlue…

PIC 16F18系列单片机开发 IO口配置与stm32的区别

目录 前言 PIC单片机配置字 电路需要IO口来发挥作用 寄存器和特殊功能寄存器 I/O口 I/O口和单片机内部寄存器之间的对应关系 前言 由于在之前学习嵌入式IDE时候都是直接接触到的是STM32 ARM内核的32位看偏激&#xff0c;现在开发使用的是美国微芯公司推出的PIC系列的单片…

【云原生】kubeadm部署k8s集群

内容预知 架构说明 1.环境准备 2.所有节点安装docker 3. 所有节点安装kubeadm&#xff0c;kubelet和kubectl 4. 部署 Dashboard 5. 安装 部署与k8s集群对接的Harbor仓库 内核参数优化方案 架构说明 前面的文章中&#xff0c;我们采用了二进制包搭建出的k8s集群&#xff…

[附源码]计算机毕业设计动漫电影网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

电子采购软件如何提高企业效率?

企业采购致力于提高生产力和效率&#xff0c;并实现更高的职能和跨职能支出的可见性。电子采购软件解决方案帮助企业实现其目标并做得更多&#xff0c;因此成为了具有前瞻性的采购领导人的明智选择。 以下是使用电子采购软件的四个主要优势&#xff1a;1、降低成本 降低成本是电…

python包管理pip常见操作

一、pip安装 暂略 二、pip常用命令 1、显示版本和路径 pip --version 2、获取帮助 pip --help 3.升级 pip pip install -U pip 4.安装资源包 pip install SomePackage # 最新版本 pip install SomePackage1.0.4 # 指定版本 pip install SomePackage&g…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.8 案例实现TCC 模式【实现】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.8 案例实现TCC 模式【实现】38.8.1 声明TCC 接口38 动手实践 38.8 案例实现TCC 模…

第34篇 网络(四)FTP(二)

导语 前面讲述了一个最简单的FTP客户端程序的编写&#xff0c;这一节我们将这个程序进行扩展&#xff0c;使其可以浏览并能下载服务器上的所有文件。 环境&#xff1a;Windows Xp Qt 4.8.5QtCreator 2.8.0 目录 一、修改界面二、功能实现 正文 一、修改界面 我们删除了T…

当vivo领先后,该学着“快”起来了

文|智能相对论 作者|佘凯文 随着一个个大热球队的爆冷&#xff0c;今年世界杯赛事正在渐入高潮。就目前的形势来看&#xff0c;世界杯最大的悬念在于究竟是“老王”圆梦&#xff0c;还是“新王”登基&#xff0c;又或者是摩洛哥这只黑马一黑到底。 新老球星的更迭&#xff0…

Selenium浏览器自动化测试框架

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…