0. 前序

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

Python免费学习资料、代码以及交流解答点击即可加入


每天迈出一小步,朝着目标迈一大步。

书荒的朋友可以不用担心了,我们可以通过豆瓣图书喜欢的标签,获取相应的图书。把对应的书名,价格,评分等等都归类下载下来。

1. 数据怎么来

首先打开豆瓣读书的官网链接,然后选择对应喜欢的标签,通过F12分析页面数据。

我们会看到搜索出来的结果,大概有五十多页,要是人工一页页翻,不知道翻到啥时候。这时我们可以用爬虫,把这些信息都下载下来。

2. 数据处理

思路如下:

  1. 通过requests去获取网站数据,每次拉取15行数据。
  2. 豆瓣返回的是html文件,这里通过BeautifulSoup去解析文件。
  3. 通过书籍详情链接去获取作者信息。
  4. 最后把爬到书籍信息存到excel里。

完整源码如下:


#-*- coding: UTF-8 -*-import time
import requests
import numpy as np
from bs4 import BeautifulSoup
from openpyxl import Workbook#Some User Agents
hds=[{'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},\
{'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},\
{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}]def book_spider(book_tag):page_num=0;book_list=[]try_times=0while(1):# url='http://www.douban.com/tag/%E5%B0%8F%E8%AF%B4/book?start=0' # For Test# url='http://www.douban.com/tag/'+urllib.quote(book_tag)+'/book?start='+str(page_num*15)url='http://www.douban.com/tag/'+book_tag+'/book?start='+str(page_num*15)time.sleep(np.random.rand()*5)#Last Versiontry:req = requests.get(url, headers=hds[page_num%len(hds)])source_code = req.textexcept Exception as e:print(e)continuesoup = BeautifulSoup(source_code, "html.parser")list_soup = soup.find('div', {'class': 'mod book-list'})try_times+=1;if list_soup is None and try_times<200:continueelif list_soup is None or len(list_soup)<=1 or page_num == 3:break # Break when no informatoin got after 200 times requestingfor book_info in list_soup.findAll('dd'):title = book_info.find('a', {'class':'title'}).string.strip()desc = book_info.find('div', {'class':'desc'}).string.strip()desc_list = desc.split('/')book_url = book_info.find('a', {'class':'title'}).get('href')try:author_info = '作者/译者:' + '/'.join(desc_list[0:-3])except:author_info ='作者/译者:暂无'try:pub_info = '出版信息:' + '/'.join(desc_list[-3:])except:pub_info = '出版信息:暂无'try:rating = book_info.find('span', {'class':'rating_nums'}).string.strip()except:rating='0.0'try:#people_num = book_info.findAll('span')[2].string.strip()people_num = get_people_num(book_url)people_num = people_num.strip('人评价')except:people_num ='0'book_list.append([title,rating,people_num,author_info,pub_info])try_times=0 #set 0 when got valid informationpage_num += 1print('Downloading Information From Page %d' % page_num)return book_listdef get_people_num(url):#url='http://book.douban.com/subject/6082808/?from=tag_all' # For Testreq = requests.get(url, headers=hds[np.random.randint(0, len(hds))])source_code = req.textsoup = BeautifulSoup(source_code, "html.parser")people_num = soup.find('div', {'class':'rating_sum'}).findAll('span')[1].string.strip()return people_numdef do_spider(book_tag_lists):book_lists = []for book_tag in book_tag_lists:book_list = book_spider(book_tag)book_list = sorted(book_list, key=lambda x:x[1],reverse=True)book_lists.append(book_list)return book_listsdef print_book_lists_excel(book_lists, book_tag_lists):wb = Workbook()ws = []for i in range(len(book_tag_lists)):ws.append(wb.create_sheet(title=book_tag_lists[i]))for i in range(len(book_tag_lists)):ws[i].append(['序号', '书名', '评分', '评价人数', '作者', '出版社'])count=1for bl in book_lists[i]:ws[i].append([count, bl[0], float(bl[1]), int(bl[2]), bl[3], bl[4]])count += 1save_path='book_list'for i in range(len(book_tag_lists)):save_path += ('-'+book_tag_lists[i])save_path += '.xlsx'wb.save(save_path)if __name__=='__main__':#book_tag_lists = ['心理','判断与决策','算法','数据结构','经济','历史']#book_tag_lists = ['传记','哲学','编程','创业','理财','社会学','佛教']#book_tag_lists = ['思想','科技','科学','web','股票','爱情','两性']#book_tag_lists = ['计算机','机器学习','linux','android','数据库','互联网']#book_tag_lists = ['数学']#book_tag_lists = ['摄影','设计','音乐','旅行','教育','成长','情感','育儿','健康','养生']#book_tag_lists = ['商业','理财','管理']  # book_tag_lists = ['名著']#book_tag_lists = ['科普','经典','生活','心灵','文学']#book_tag_lists = ['科幻','思维','金融']book_tag_lists = ['武侠']book_lists=do_spider(book_tag_lists)print_book_lists_excel(book_lists, book_tag_lists)

3. 写在最后

代码中加了周期间隔,刚开始验证测试的时候,最好先选取单个标签,防止代码运行过长。

另外,每个标签返回的书籍列表会很多,可以加相应的页数限制,让效果更加明显,当然了想一下子获取全部可以忽略。

Python爬取搜集豆瓣图书集,书荒的朋友们再也不用担心了相关推荐

  1. Python——爬取目标豆瓣图书TOP250

    目标网址:https://book.douban.com/top250?start=0 参考资料: Requests:               http://docs.python-request ...

  2. python爬取豆瓣影评理论依据_我用Python爬取了豆瓣的影评

    使用Python爬取豆瓣的影评,比爬取网易云简单,因为不需要设置特定的headers,关于网易云说几句,很难爬取,对请求头有着严格的要求,前几年那会还好些. 爬取结果分为:用户名,评价的星级,评论的内 ...

  3. 我用Python爬取了豆瓣影评,成功后居然发现了一个惊人的秘密.........

    大家好,我是IT界搬运喵. 相信大家在工作无聊时,总想掏出手机,看看电影刷刷视频.更加是夜深人静的时候,总是按耐不住自己的内心想要去看看小电影,当然我可没有开车.我说的是好电影,豆瓣高分电影,自己想歪 ...

  4. python爬取京东商品数据要先登录_3分钟教你不用python也能爬数据

    想成为一名Data Scientist,需要掌握收集数据.利用Excel进行简单的描述性信息分析.利用机器学习神经网络等技术进行预测性及挖掘性数据分析.可视化呈现信息.最终得到商业Insights的能 ...

  5. python爬豆瓣top250书籍_Python——爬取目标豆瓣图书TOP250

    目标网址:https://book.douban.com/top250?start=0 导入模块: import requests from bs4 import BeautifulSoup 添加he ...

  6. python爬取练习 名侦探柯南剧集信息——各集列表

    爬虫练习 2 爬取百度百科"名侦探柯南各集列表"网页 目标: https://baike.baidu.com/item/%E5%90%8D%E4%BE%A6%E6%8E%A2%E6 ...

  7. 用python爬取交大图书馆图书信息

    由于到图书馆中查找数据的时候,每个网页都需要一张一张的翻转,而同时因为每张网页中的内容十分有限,故写此爬虫,方便查找之用 # -*- coding=utf-8 -*- #@author: .Edgar ...

  8. python爬取微信读书APP的书单

    1.确保已安装mitmproxy 如果没有安装,可以参考https://blog.csdn.net/liujingliuxingjiang/article/details/121633927?spm= ...

  9. python爬取王者荣耀皮肤集

    一.英雄名对应英雄链接 依赖库导入 from selenium import webdriver 获取网页源代码 driver = webdriver.Chrome('D:\\数据分析\\chrome ...

最新文章

  1. R语言vtreat包的mkCrossFrameCExperiment函数交叉验证构建数据处理计划并进行模型训练、通过显著性进行变量筛选(删除相关性较强的变量)、构建多变量模型、转化为分类模型、模型评估
  2. 2021年普高考成绩查询,山东2021年高考成绩改为6月26日前公布
  3. jQuery:计算表中的行数
  4. boost::geometry::detail::as_range用法的测试程序
  5. 数据标准是物联网大集成应用的核心
  6. FFMPEG 常用命令行
  7. 嵌入式linux运行mbedtls,mbedTLS(PolarSSL)简单思路和函数笔记(Client端)
  8. web前端开发师前景,96道前端面试题
  9. Shell 获取服务器IP地址
  10. WPS中的word如何取消英文首字母大写
  11. 串口拓展测试方法及步骤--信而泰TeleATT测试软件实操
  12. Hexo - Next - Mist 风格主题的美化(二)
  13. rknn3399pro 2小时入门指南(八)详细教程指导你一步到位训练得到yolov3 rknn模型
  14. 思科路由器地址转换配置
  15. Qt 快速利用qt designer Layout绘制GUI界面
  16. 深入浅出mybatis分页
  17. 2018秋招求职地图 | 教你如何打造重量级求职敲门砖
  18. k8s pod 无法运行,错误registry.access.redhat.com/rhel7/pod-infrastructure:latest
  19. python对象怎么打印出来
  20. 有哪些投资小的生意(盘点四个投资小风险低的生意)

热门文章

  1. 嵌入式软件开发培训笔记——Java第二天(运算符、程序结构、数组与继承)
  2. VBA 自定义函数语法
  3. JavaFX开发桌面,移动端,嵌入式权威指南(一)—— JavaFX桌面入门小项目
  4. 03-Matplotlib数据可视化
  5. Python Turtle绘图[难度3星]:24节气倒计时(2.使用字典存储数据)
  6. 2021下半年教资综合素质——主观题
  7. 基于MATLAB GUI的环境温湿度检测界面设计
  8. 应用程序无法启动,因为应用程序的并行配置不正确;解决办法
  9. 阿里云区块链平台相关研究
  10. JMS583硬盘盒无法识别傲腾M10的解决(含JMS583固件更新方法及最新固件)