Python爬虫获取电子书资源实战

article/2025/11/11 8:26:51

最近在学习Python,相对java来说python简单易学、语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高。大大提高了咱们的生产力。为什么python能够在这几年火起来,自然有他的道理,当然也受益于这几天大数据和AI的火。

据说网络上80%的爬虫都是用python写的,不得不说python写爬虫真的是so easy。基本上一个不太复杂的网站可以通过python用100多行代码就能实现你所需要的爬取。现在就以一个电子书的网站为例来实现python爬虫获取电子书资源。爬取整站的电子书资源,按目录保存到本地,并形成索引文件方便查找。

有详细的配套教程以及源码,都已经打包好上传到百度云了,链接在文章结尾处!
需要可以微信扫描下方CSDN官方认证二维码免费领取

爬取的目标网站:苦瓜书盘

步骤:爬取->分析、解析->保存

对于一个不需要登录验证的资源分享类的网站,爬取最大的工作量应该是在对目标页面的分析、解析、识别,这里用的到是Python的BeautifulSoup库。

  • 一、获取目录
  • 二、获取书籍列表页
  • 三、获取书籍详情页
  • 四、分析书籍详情页的资源地址
  • 五、下载并保存

一、获取目录

在这里插入图片描述

通过浏览器的调试工具可以看到目录在id=catagory的div标签下,下面还有ul和li标签,那我们可以迭代li可以获得目录及目录页的地址。

可以通过soup.find_all(attrs={‘id’: ‘category’})[0].ul 获取 到ul标签,然后获取ul的li标签,进行迭代获取。

代码如下:

‘’’

获取目录

‘’’

def getcategory():req_result=requests.get(main_url,headers=headers)if req_result.status_code==200:htmlstr=req_result.content.decode('utf-8')soup = BeautifulSoup(htmlstr, 'lxml')categorys=soup.find_all(attrs={'id': 'category'})[0].ulfor li in categorys.find_all(name='li'):print('开始抓取'+li.a.attrs['href']+"--"+li.string)getcategroydetail(main_url+li.a.attrs['href'],li.string)time.sleep(1)

二、获取书籍列表页

在书籍列表页,我们要获取两个信息,分别是书籍列表的信息及翻页下一页书籍列表的URL地址。
在这里插入图片描述

通过浏览器的调试工具分别对列表的信息及翻页下一页的html进行分析。

在这里插入图片描述

列表中的书籍详情页信息在class="channel-item"的div标签下,通过class="list-title"的h3标签循环迭代

下一页,我们可以直接通过next_pag=soup.find(name=‘a’,text=re.compile(‘下一页’))来获取。

然后我们可以通过递归来不断的调用获取下一页书籍列表页的代码,知道没有下一页为止。就可以把怎个目录都可以爬取完。

代码如下:

‘’’

获取书籍列表

‘’’

def getbookslist(bookurlstr,categroy_path):book_result=requests.get(bookurlstr,headers=headers)bookhtmlstr=book_result.content.decode('utf-8')soup = BeautifulSoup(bookhtmlstr, 'lxml')booklists=soup.select('.channel-item')for bookinfo_div in booklists:booktitle_div=bookinfo_div.select('.list-title')[0]bookurl=booktitle_div.a.attrs['href']getbookdetail(bookurl,categroy_path)next_pag=soup.find(name='a',text=re.compile('下一页'))if next_pag is not None:next_url=next_pag.attrs['href']print('爬取下一页:'+next_url)getbookslist(next_url,categroy_path)

三、获取书籍详情页

我们要在书籍详情页需要获得书籍详情信息包括书名、作者等信息

关于书名和作者可以分别通过提取class="news_title"的h1标签和id="news_details"的div下的ul下的li再通过正则表达式对作者信息进行提取。

booktitle=bookdetailsoup.select('.news_title')[0].text.strip()bookauthor=bookdetailsoup.select('#news_details')[0].ul.li.find(text=re.compile('作者:(.*?)')).strip()bookauthor=bookauthor.replace('作者:','')booktitleinfo="《"+booktitle+'》-'+bookauthor

四、分析书籍详情页的资源地址

在书籍详情页,我们还要分析书籍详情页的资源地址

电子书的资源下载地址可以通过提取a标签的信息来获取。通过正则表达式分别匹配azw3、mobi、epub分别提取不同的电子书资源。

book_url_item=bookdetailsoup.find(name=‘a’,text=re.compile(booktype,re.I))

代码如下:

‘’’

根据书籍资源类型下载资源

‘’’

def getbookfortype(bookurl,categroy_path,bookdetailsoup,booktype):booktitle=bookdetailsoup.select('.news_title')[0].text.strip()bookauthor=bookdetailsoup.select('#news_details')[0].ul.li.find(text=re.compile('作者:(.*?)')).strip()bookauthor=bookauthor.replace('作者:','')booktitleinfo="《"+booktitle+'》-'+bookauthorprint('书籍详情:---'+booktitleinfo)book_url_item=bookdetailsoup.find(name='a',text=re.compile(booktype,re.I))if book_url_item is not None:downloadurl=book_url_item.attrs['href']print('下载地址:'+downloadurl)if checkIfNoExistBookByUrl(downloadurl):r = requests.get(downloadurl)if r.status_code==200:savepath=createdir(categroy_path,booktitleinfo)filename=booktitle+"."+booktypesavebook(r.content,savepath,filename)p,f=os.path.split(categroy_path)bookcategory=fbook=Book(bookcategory,booktitle,bookauthor,bookurl,downloadurl,savepath,"苦瓜书盘",booktype)print(book.toString())savebooktojson(book)else:print('下载失败:status_code='+str(r.status_code))else:print('没有'+booktype+'格式的书')

五、下载并保存

有了资源的下载资源后下载就变得很简单了,主要用python的os库,对文件进行操作,包括建目录及保存资源文件。也可以通过连接数据库将爬取的数据保存到数据库。

定义书籍类Book用于组织和保存数据。

class Book(object):

def __init__(self,bookcategory,bookname,bookauthor,bookurl,bookdownloadurl,booksavepath,booksource,booktype):self.bookcategory=bookcategoryself.bookname=booknameself.bookauthor=bookauthorself.bookurl=bookurlself.bookdownloadurl=bookdownloadurlself.booksavepath=booksavepathself.booksource=booksourceself.booktype=booktypedef toString(self):return {"bookcategory":self.bookcategory,"bookname":self.bookname,"bookauthor":self.bookauthor,"bookurl":self.bookurl,"bookdownloadurl":self.bookdownloadurl,"booksavepath":self.booksavepath,"booksource":self.booksource,"booktype":self.booktype}

‘’’

将获取的信息保存至文件

‘’’

def savebooktojson(book):bookdata={'booksource':book.booksource,'booktype':book.booktype,'bookcategory':book.bookcategory,'bookname':book.bookname,'bookauthor':book.bookauthor,'bookurl':book.bookurl,'bookdownloadurl':book.bookdownloadurl,'booksavepath':book.booksavepath}

bookjson=json.dumps(bookdata,ensure_ascii=False) #ensure_ascii=False 就不会用 ASCII 编码,中文就可以正常显示了

print(bookjson)with open('data.json', 'a',encoding='gbk') as file:file.write(bookjson+'\n')'''根据目录创建文件夹'''def createdir(savepath,dir):path=os.path.join(savepath,dir)isExists=os.path.exists(path)if isExists:print('已经存在'+dir)else:print('创建目录'+dir)os.mkdir(path)return path'''

下载书籍资源

‘’’

def savebook(content,savepath,savefilename):savefile=os.path.join(savepath,savefilename)with open(savefile, "wb") as code:code.write(content)

运行效果如下:

1、爬取过程

2、爬取记录的json信息

data.json的信息如下:

3、爬取获取的资源

按目录都已经整理好了,够你看的了。


http://chatgpt.dhexx.cn/article/IW8rgxXs.shtml

相关文章

全套Python零基础学习资料,电子书整理好了,想要进行技术提升,转行的自取!

今天分享Python入门级宝典 所有资料都是专业大佬总结整理出来的 Python的知识体系,从0开始学习Python看这一篇就够了! 《Python入门思维导图》 《看漫画学Python电子版》 《Python学习路线图》 《100道Python练习题》 《70个Python项目》 今天把这些分享给真…

【MATLAB统计分析与应用100例】案例015:matlab读取Excel数据,进行值聚类分析

1. 聚类分析轮廓图 2. matlab完整代码 %*****计算例9.1的距离矩阵 x = [1, 2, 6, 8, 11];

Python使用K-means聚类分析

Python使用K-means聚类分析 文章目录 Python使用K-means聚类分析介绍1.集群标签作为特征 一、k-均值聚类二、示例 - 加州住房2.KMeans 总结 介绍 提示:这里可以添加本文要记录的大概内容: 本文将使用所谓的无监督学习算法。 无监督算法不使用目标&…

机器学习算法精讲20篇(一)-k-means聚类算法应用案例(附示例代码)

前言 k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 。 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门…

【MATLAB统计分析与应用100例】案例016:matlab读取Excel数据,进行样品系统聚类分析

1. 聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化 [X,textdata] = xlsread(examp09_02.xls); % 从Excel文件中读取数据 X = zscore(X

数据挖掘的常用方法、功能和一个聚类分析应用案例

在今天的博文中,笔者整理了数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科)。当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整。除此以外,笔者尝试学习了SMARTBI公司中的Smart Mining软件&#xff0…

基于R语言的层次聚类分析-【案例实操】-基本操作,一看就会

基本思想 每一个样本作为一类按照某一种方法进行距离度量,比如“欧氏距离”距离最短划为1类重复步骤2和3,每次减少一类,直至所有样本合成1类 案例 数据 这里用鸢尾花数据集作为实验数据 data(iris)# 载入数据 plot(iris)# 画图**注意&am…

python数据分类聚类案例_用Python进行系统聚类分析

在进行机器学习时,我们往往要对数据进行聚类分析,聚类,说白了就是把相似的样品点/数据点进行归类,相似度高的样品点会放在一起,这样一个样本就会被分成几类。而聚类分析也有很多种方法,比如分解法、加入法、有序样品的聚类、模糊聚类法以及系统聚类法等。而本文要介绍的就…

数据挖掘时功能和一个聚类分析应用案例

数据挖掘时功能和一个聚类分析应用案例 数据挖掘的常用方法和数据挖掘的重要功能(出自MBA智库百科)。当然,横看成岭侧成峰,这些常用方法和重要功能也许并不完全正确或完整。除此以外,笔者尝试学习了SMARTBI公司中的Smart Mining软件&#xff…

聚类案例分析全流程汇总

一、案例说明 1.案例背景 研究调查10名运动员的3项测试数据,其中三项分别是:肩宽/髋宽100、胸厚/胸围100、腿长/身长100。其中编号为4、6、8、9的4名运动员分别是蛙、自由、仰、蝶泳四种姿势的佼佼者。预计姿势按姿势分为蝶泳、仰泳、蛙泳、自由泳4类&…

同你分享1个完整的聚类分析案例

这篇文章从对聚类的感性认识到聚类算法的实现: k个初始中心点的选择,中心点的迭代,直到算法收敛得到聚类结果。 但有几个问题需要回答: 如何判断数据是否适合聚类?k类是如何确定的?遇到数据集小的时候&…

Python 实操案例:一文详解10种聚类算法

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种…

SPSS中系统聚类操作案例

示例: 一啤酒生产商想了解当前啤酒市场情况,并判断时下最受欢迎的啤酒品牌,收集了多种啤酒在售价、热量、钠含量、酒精含量等方面的数据。运用系统聚类法对各项数据进行分析,并给出: (1)所有样…

一篇文章透彻解读聚类分析及案例实操

1 聚类分析介绍 1.1 基本概念 聚类就是一种寻找数据之间一种内在结构的技术。聚类把全体数据实例组织成一些相似组,而这些相似组被称作聚类。处于相同聚类中的数据实例彼此相同,处于不同聚类中的实例彼此不同。聚类技术通常又被称为无监督学习&#xff…

暗光增强论文“Kindling the Darkness: A Practical Low-light Image Enhancer”

暗光增强论文“Kindling the Darkness:A Practical Low-light Image Enhancer” 还是retinex-based的思想,将图像调节分解为2个部分:一个部分是负责光照的调节,一份部分是负责退化的去除。在这样的方法下,最原始的空间是被分成两…

NFC学习笔记(2)——NFC基础知识

书接上文 在等待PN532板子到货的同时,需要了解一些NFC的知识。 NFC卡分为5类 * I 型卡(不支持防冲突) * II 型卡 Mifare Ultralight卡 * III 型卡 Sony FeliCa卡 * IV 型卡 NXP DESFire卡 * V 型卡 NXP Mifare Classic卡 平时最常使…

Low-Light Image Enhancement with Normalizing Flow

基础理论知识点: 李宏毅flow-model: 参考博客、flow-model视频 Flow-model参考博客 3 Methodology 在本节中,首先介绍以往基于像素级重建损失的微光增强方法的局限性。然后,介绍了图2中我们的框架的总体范式。最后,我们提出的框架…

Ultra Edit使用技巧

Ultra Edit使用技巧 1.去掉横向滚动条(自动换行) 在菜单栏选择“高级->配置”,进入如下界面。然后在“编辑器”选项的“自动换行”界面里,选择“默认为每个文件启用自动换行”。 2.列编辑模式 按“ALT c”组合键可进入列编辑模式,可以按…

HighlightingSystem插件使用(边缘发光)

插件链接: http://pan.baidu.com/s/1dFwkaTr 密码: nw2c 导入Unity里面可能会报错,不过没关系,直接注释掉就可以了,我用的是Unity5.1的版本 可以看到如下文件夹,HighlighingSystemDemo是一些实例,可以看一下&#xff0…

HighlightPlus物体自发光

只介绍常用的几个参数与使用: