如有错误,请疯狂打脸没关系,希望能够指出来。

0. 开始的开始

一直想做一个图书漂流软件,最近入手(入坑)了微信小程序,添加图书时需要用到isbn查询书籍信息的API(不用也可以,但用户会非常麻烦,强迫症晚期的我又跳入了isbn查询API的坑),但发现别人的API都很贵,豆瓣也收回了API的使用权,估计是要收费了。
所以,与其在坑里苦苦挣扎,不如。。。。再挖一个更大的坑,自己做一个。。。

1. 开始

首先打算用python写个爬虫(能力与知识有限,现在只能想到这个办法,如前辈们有更好的办法,请砸过来)。
搜索了几个可以用isbn查书籍信息的网站,最后还是选择了豆瓣。
豆瓣isbn查书籍信息的流程为:

  1. 打开豆瓣读书的首页
  2. 在搜索框输入isbn码
  3. 回车或点击小放大镜,书籍的信息出来了

本来想的很好,就这样一路闪电带火花把核心代码写了,然而,总有不尽人意的地方。就在第3步,本来打算在这里把信息给爬了,却发现爬回来是空的,也不知道什么原因(查html代码,发现有一级标签id为root,可能豆瓣设置了权限,猜的,具体原因不知道)。

2. 爬取内容

虽然人生不尽人意,但还是要走下去。在第3步的页面,点击书名或图片会出来更详细的信息。

果然,这里的信息可以爬取,要什么有什么。

2.1 获取书籍信息页面的链接地址

思路:
打开豆瓣读书首页,模拟浏览器填写isbn码,进行搜索,跳转到搜索结果页面,读取a标签href链接,即书籍信息页面的链接地址。
代码如下:

def isbn_search(isbn):"""输入:isbn输出:豆瓣搜索结果的书籍链接"""# 创建浏览器对象browser = webdriver.PhantomJS()# 请求网址browser.get("https://book.douban.com/subject_search?search_text=" + isbn + "&cat=1001")# 解析网页信息soup = BeautifulSoup(browser.page_source, "lxml")# 读取标签内容tags = soup.select("#root > div > div > div > div > div > div > a")# 正则查找href链接link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", str(tags[0]))# 关闭浏览器browser.close()return link_list[0]

2.2 爬取书籍详细信息

思路:
打开2.1获取的页面,找到书籍信息块代码,爬回并清洗,得到需要的信息。
代码如下:

def book_info(douban_link):"""输入:豆瓣书籍链接输出:书籍信息"""# 请求网址g=requests.get(douban_link)# 解析网页信息soup=BeautifulSoup(g.content,"lxml")# 由于书名和其他信息不在一起,单独处理书名title = "书名: 《" + re.sub('[\f\n\r\t\v]','',re.sub('<([^>]+?)>','',str((soup.select("#wrapper > h1 > span"))[0]))) + "》"# 存储书籍信息infos = [title]# 返回特定区域的html代码块span_list = soup.findChild('div',{'id':'info'})for item in str(span_list).split('<br/>'): # 将信息按项目分割,每个item是一个信息项# 用两次正则,一次去掉多余html代码,一次去掉制表换行等字符# .split(":")以:分割每个信息项目info_item = re.sub('[\f\n\r\t\v]','',re.sub('<([^>]+?)>','',item)).split(":")info_temp = [] # 存放以“/”分隔的itemfor info_item_item in info_item:sprit = info_item_item.partition("/") # 以“/”分隔info_item_itemfor sprit_item in sprit:info_temp += sprit_item.partition("]") # 以“/”分隔sprit_item, 并将处理后的列表合并# info_temp 存储单项信息的列表# 以单项信息为操作单位去除空格# temp_list 存储去空格处理后的单项信息temp_list = []for temp in info_temp:ddd=temp.strip() # 去掉字符左右的空格# 过滤掉因去掉空格而产生的空字符串if ddd != '':temp_list.append(ddd)else:continue# 在书籍属性后加“:”info = temp_list[0] + ': 'for i in range(1, len(temp_list)):info += temp_list[i] # 拼接每个信息项目# 判断temp_list是否为空,为空则info为错误值,不存入infosif temp_list:passelse:continue infos.append(info)return infos

3. 效果



这里使用PhantomJS浏览器,但会报UserWarning,Selenium最新版不支持PhantomJS了,我用的Selenium 3.141.0,UserWarning建议使用谷歌或火狐浏览器的无头模式,但我没成功,如有大佬成功了希望交流一下。

4. 完整代码下载

isbn查询书籍详细信息
上一个版本由于某种原因,已不能使用,请下载 v2.0 版本。
isbn查询书籍详细信息2.0
由于csdn下载积分随下载次数不断增加,如积分不够,可私聊我,如果有积分还是希望赞助一下。

仅供学习,勿作商用,如有违反,后果自负。
不知道豆瓣有一天会不会把这个方法给ban掉。

Python爬虫实现isbn查询豆瓣书籍详细信息相关推荐

  1. python 实现用ISBN从豆瓣获取图书信息

    今天写了一个从豆瓣获取图书信息并返回json数据的小程序,记录一下. 豆瓣API有一个地址https://api.douban.com/v2/book/isbn/9787115404831 可以通过更 ...

  2. python爬虫之bs4模块(超详细)

    python爬虫之bs4模块(超详细) 一.bs4简介 二.使用方法 三.BeautifulSoup四大对象种类 (1)tag (2)NavigableString (3)BeautifulSoup ...

  3. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  4. Python 爬虫实战:分析豆瓣中最新电影的影评

    Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...

  5. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  6. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) -- 数据的持久化--使用MongoDB存储爬取的数据 最近项目有些忙,很多需求紧急上线,所以一直没能完善< 使用 ...

  7. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) —— 编写一个基本的 Spider 爬取微博用户信息

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(一) -- 新建爬虫项目 在上一篇我们新建了一个 sina_scrapy 的项目,这一节我们开始正式编写爬虫的代码. 选择目标 ...

  8. SSM项目图书馆管理系统,适合新人练手和毕设参考,功能首页展示 系统注册登录登出 用户管理 权限控制管理 书籍管理 图书借阅管理 个人借阅记录管理 书籍详细信息展示等

    图书馆管理系统,系统采用B/S架构 系统采用框架:java+maven+stringboot+mybatis+mysql-plus+boostart(前端界面) 首页展示 内容后台管理 菜单权限管理 ...

  9. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  10. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(三) —— 数据的持久化——使用MongoDB存储爬取的数据

    上一篇:[Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(二) -- 编写一个基本的 Spider 爬取微博用户信息 在上一篇博客中,我们已经新建了一个爬虫应用,并简单实现了爬取一位微 ...

最新文章

  1. android京东秒杀倒计时,js实现京东秒杀倒计时功能
  2. 软件的一切关乎成本,以消亡为结束
  3. 浏览器标签栏滚动消息提示
  4. 黑马程序员_Java解析网络数据流的三种特殊方法
  5. vue拖拽控件生成界面代码_Blue HMI人机界面开发平台
  6. SUSE glibc升级为2.18过程记录
  7. 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )
  8. 实现option上下移动_js: 实现Select的option上下移动 | 学步园
  9. 在Apache Camel中使用Spring数据
  10. Cobra命令行框架及使用
  11. laravel 5 : Class 'input' not found
  12. 2020杭电多校赛第四场1007 Go Running(hdu6808)
  13. Word去除段前黑点
  14. 喇叭POP爆破音产生的原因与解决办法
  15. 海昇智:拼多多推广创意图如何才能做好?
  16. 解决光纤猫恢复出厂功能后的上网问题
  17. 恐怖呀,恐怖....
  18. Java笔记-面向对象(上)
  19. 5G NR LDPC码(1)—— LDPC码设计原理
  20. k8s的yaml文件配置详解(三)

热门文章

  1. 苹果4创建id显示服务器错误,苹果无法创建账户是什么意思
  2. Java常用日志框架介绍(转载)
  3. 目标检测算法——小目标检测相关数据集(附下载链接)
  4. 《CCNet:Criss-Cross Attention for Semantic Segmentation》论文笔记
  5. 【人工智能】一文读懂人脸识别技术
  6. 【支付】银行卡收单业务
  7. python英文情绪识别_Python能识别文字情绪?
  8. 手机投屏不是全屏怎么办_手机投屏怎么全屏使用?
  9. 2021年杭州行政区划调整方案与远景轨道线网概念图
  10. ImportError: _C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at4_ops6narrow4callERKNS_6Ten