范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Python爬虫获取电子书资源实战,值得一看

  最近在学习Python,相对java来说python简单易学、语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高。大大提高了咱们的生产力。为什么python能够在这几年火起来,自然有他的道理,当然也受益于这几年大数据和AI的火。
  据说网络上80%的爬虫都是用python写的,不得不说python写爬虫真的是so easy。基本上一个不太复杂的网站可以通过python用100多行代码就能实现你所需要的爬取。
  现在就以一个电子书的网站为例来实现python爬虫获取电子书资源。爬取整站的电子书资源,按目录保存到本地,并形成索引文件方便查找。
  爬取的目标网站:苦瓜书盘步骤:爬取->分析、解析->保存
  对于一个不需要登录验证的资源分享类的网站,爬取最大的工作量应该是在对目标页面的分析、解析、识别,这里用的到是Python的BeautifulSoup库。
  一、获取目录
  二、获取书籍列表页
  三、获取书籍详情页
  四、分析书籍详情页的资源地址
  五、下载并保存准备
  引入相应的包,设置 headerd, 和资源保存路径import requests import os import re from bs4 import BeautifulSoup import time import json from Book import Book  savepath="J://kgbook//books//" #保存地址 headers = {     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" } main_url="https://kgbook.com/" bookcount=0 一、获取目录
  通过浏览器的调试工具可以看到目录在id=catagory的p标签下,下面还有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].ul         for 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"的p标签下,通过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_p in booklists:         booktitle_p=bookinfo_p.select(".list-title")[0]         bookurl=booktitle_p.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"的p下的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+"》-"+bookauthor     print("书籍详情:---"+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+"."+booktype                 savebook(r.content,savepath,filename)                 p,f=os.path.split(categroy_path)                 bookcategory=f                 book=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=bookcategory         self.bookname=bookname         self.bookauthor=bookauthor         self.bookurl=bookurl         self.bookdownloadurl=bookdownloadurl         self.booksavepath=booksavepath         self.booksource=booksource         self.booktype=booktype      def 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+" ") """ 根据目录创建文件夹 """ 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、爬取获取的资源
  按目录都已经整理好了,够你看的了。

买洗碗机的人,都悄悄地用上瘾了很多夫妻因为家务谁做的问题,闹得不可开交,特别是洗碗,不情愿的时候把锅碗瓢盆弄得叮叮咣咣响,而这些让人烦躁的噪音,也会让矛盾加深,听说有人闹到了离婚的地步。而洗碗机,很多人都说可以墙面只能是单色?或许你可以试试拼接色墙面选色是一件挺让人头疼的事,想要简单百搭的纯色系又担心过于寡淡想要个性张扬的彩色系又担心不耐看,深知鱼和熊掌不可兼得却依旧迟迟无法定夺。实际上,两种想法并非无法共存,比如说大胆的减轻家务负担,卫生间需要这5个合理设计在家居生活中,卫生间虽然占据面积小,但是使用频率高,清理的时候也比其他区域还要费时费力。常年潮湿的地面,容易积灰的台面,堆积在死角的头发,水迹弥漫的玻璃门等,都能在清理的过程中让人百叶帘,让居家生活更有格调窗帘是室内装修中必不可少的部分。在选择窗帘时,往往会习惯性的选择落地窗帘,很少问津它的好兄弟百叶帘,但就颜值而言,两者的颜值各有千秋,没有谁比谁差的问题!其实,很多人内心是想装百叶岚图FREE正式下线,第三季度开始交付关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革6月30日,在武汉岚图工厂,东风公司的第5200万辆汽车下线,这也是旗下新品牌岚图的首部量产车下线,接下来新车将于今年第木纹砖效果怎样,我总结了些经验你还在纠结地面铺瓷砖还是木地板吗?瓷砖,夏天冰凉舒适,冬天冰冷刺骨,但耐磨好打理木地板,一年四季都拥有温润的脚感,颜值正义,但不耐磨不好打理越对比越纠结,特别想要一款产品,既可以弥爱上下厨,从拥有一个中西并存的厨房开始对于新家的规划,大部分人会先将重点放在厨房,从整体布局到细节布置,一笔一画,企图在居住空间中勾勒出令人眷恋的烟火气。但在规划的过程中,由于厨房空间有限,对烹饪习惯喜好中西混合的使用有了它,我想对开放式厨房说再见现在的房子,以中小户型为主,在经济发达的城市更是以小户型居多。然而因为居住人口的问题,大部分削尖了脑袋想把空间变大也因为越来越重视所处空间内与亲朋好友之间的交流互动,所以开放式空间台面无物的厨房,让幸福感飙升某种程度上来说,厨房台面是否干净整洁,影响着一个人的下厨心情,生活质量。特别在厨房面积狭小,东西又多的情况下,台面状态几乎接近负荷,除了基本的厨电以外,还堆满了调味品碗具刀具菜品已高低错层,给家添点格局感利用高低错层来打破界限,空间将会呈现出怎样的模样呢?这似乎是一场有趣的设计,我们一起来看看。在开始之前,老规矩,我们先来了解一下什么是高低错层。高低错层,简单理解就是将原本两个处于挡水条在装修中这么重要,怎能被忽略装修过程中,不少人都忽视了挡水条的重要性,认为只需要简单施工就好,没什么复杂的。但实际上,挡水条在卫生间和厨房这两个区域意义重大,安装失误或者施工不当,都可能让这两个区域出现藏污纳
vuepackage。json配置解析!name很容易理解,就是项目的名称,它是一个字符串。在给name字段命名时,需要注意以下几点名称的长度必须小于或等于214个字符,不能以。和开头,不能包含大写字母名称可以作为参数使用1年电池健康度99!五个技巧,延长电池寿命和续航时间相信很多人都会有这样一个感慨,,手机使用一段时间之后,续航能力会越来越差了。新机一天一充轻轻松松,要是用上一年以上,可能只能坚持大半天了。要是用上两年以上,掉电速度真是刷刷的。如果魅族新品曝光,网友这也太像iPhone13了吧?在今年的一月中旬,魅族官方举办了一场冬季新品发布会,在发布会上魅族不仅发布了众多周边产品,还带来了魅蓝品牌回归后的首款产品魅蓝10,其主打轻巧高颜值,安全长续航。这是魅族对于市场战男人也能怀孕?苹果更新iOS新增表情符号惹争议,遭受网友质疑苹果公司最近刚推出新的iOS更新,遭受不少网友的吐槽和质疑。苹果最新测试版的iOS15。4升级,受到网友和用户的吐槽属于正常现象毕竟众口难调,不过此次升级你会发现,苹果公司在iOS1000元买iPhone8P资源机,查询发现有隐藏ID!网友白给都不要想买个二手iPhone非常难,不是翻新机就是各种问题机。网友想买个iPhone8Plus当备用机。看上系统是iOS12,但查询结果却让他惊讶,因为该机有隐藏ID。难怪不升级,是因为为什么5G投入巨大,最后体验上感觉和4G的差别不大?很多人说为什么大投入出来的5G在体验上和4G差别不大,因为点错了科技树,把升级方向放在了不重要的技术指标上。很多人说,现在的5G之所以没啥感觉,是因为速度还不够快,等未来速度达到多春节回家路上的烦恼新能源汽车排队充电难本报记者高沛通赵毅广州报道服务区不要说充电,连进入都成为了困难。如果新能源车主执意要在这里(常州芳茂山服务区,往上海方向)排队等候充电的话,估计等候时间可能会超过三个小时2月7日,WIC资讯从落地开花到触手可及人工智能正迎来绽放时刻在第24届冬奥会开幕式的主题曲演唱环节,几百个孩子手举发光的和平鸽在鸟巢中央奔跑,孩子们脚下的屏幕随即亮起雪花这其实是人工智能的0延时捕捉和平鸽技术在大放异彩,是在大型演出中基于人Carbon在Laravel中的简单使用在编写PHP应用时经常需要处理日期和时间,这篇文章带你了解一下Carbon继承自PHPDateTime类的API扩展,它使得处理日期和时间更加简单。Laravel中默认使用的时间处Golang入门到项目实战golang简介及安装golang简介Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态强类型编译型语言。Go语言语法与C相近,DC系列靶机知识点总结常用命令和工具metasploitnmapsqlmap中国蚁剑冰蝎dirsearchdirbuster等常用工具就不在此介绍了nmap192。168。26。024nmapsSsVT