豆瓣新书速递数据爬取与简单数据处理

概要

  • 数据爬取

爬取豆瓣平台提供的数据,存储到本地 json 文件。

数据说明 URL
豆瓣新书速推 HTML https://book.douban.com/latest?icn=index-latestbook-all
豆瓣单条图书查询 RESTful API https://api.douban.com/v2/book/:id?apikey=0df993c66c0c636e29ecbb5344252a4a
  1. 使用 urllib3,获取豆瓣新书速推网页的 HTML 相应数据,在使用 bs4 库,从HTML DOM 中解析出所有新书的 id,保存到一个 list 对象中
  2. 遍历list:通过新书的 id,调用豆瓣单条图书查询 RESTful API,获取对应图书id的详细数据(一个 json 字符串数据,转换为 dict 对象),添加到 list 中
  3. 爬取完所有图书数据后,调用 json 库,把保存了图书数据的list 对象持久化到文件系统中。
  • 数据预处理

对爬取到的数据简单预处理,进行数据清洗、数据变换、数据规约和数据导出过程。

数据预处理过程在Jupyter Notebook 上运行,主要使用了 Python 和 Pandas 做数据处理,内容包裹处理空值、数据格式等,最后进行数据规约、排序、分组等操作,把处理后的数据持久化到本地,供后续使用。

源码

源码包含了类型注解和注释

  • 数据爬取

"""
采集豆瓣网站的新书速递图书数据- 新书速推HTML: https://book.douban.com/latest?icn=index-latestbook-all
- 单条图书查询 RESTfulAPI: https://api.douban.com/v2/book/:id?apikey=0df993c66c0c636e29ecbb5344252a4a"""# from typing import Dict,List
import urllib3
from urllib3.response import HTTPResponse
from bs4 import BeautifulSoup, PageElement, ResultSet
from typing import Dict, List
import json
import datetime__author__ = "onemsg (kvimsg@live.com)"DEFAULT_HEADERS = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \Chrome/83.0.4103.97 Safari/537.36 Edg/83.0.478.45"
}def get_new_books() -> Dict[str,List[str]]:"""爬取页面 https://book.douban.com/latest?icn=index-latestbook-all 的图书 idreturn 包含一个包含了 图书id 的 dict"""url = "https://book.douban.com/latest?icn=index-latestbook-all"r: HTTPResponse = urllib3.PoolManager().request('GET', url, headers=DEFAULT_HEADERS)bs = BeautifulSoup(r.data, features="lxml")fiction: ResultSet[PageElement] = bs.select("#content > div > div.article > ul > li")non_fiction: ResultSet[PageElement] = bs.select("#content > div > div.aside > ul > li")books = {"fiction": [],"non_fiction": []}for li in fiction:li:PageElementid: str = li.find_next("a")["href"].split("/")[-2]books['fiction'].append(id)for li in non_fiction:li: PageElementid: str = li.find_next("a")["href"].split("/")[-2]books['non_fiction'].append(id)return booksdef get_book_info(book_ids: List['str']) -> List[Dict]:"""获取一个图书id list中所有图书信息调用API: https://api.douban.com/v2/book/:id?apikey=0df993c66c0c636e29ecbb5344252a4areturn: 一个 list[dict] 包含所有图书信息"""http = urllib3.PoolManager()url_template = "https://api.douban.com/v2/book/{}?apikey=0df993c66c0c636e29ecbb5344252a4a"books = []for id in book_ids:r: HTTPResponse = http.request("GET", url_template.format(id))book = json.loads(r.data.decode("utf-8"))books.append(book)print("id {} book 采集完成 -".format(id))return booksif __name__ == "__main__":print(" === 豆瓣新书速递 数据采集开始 ===")book_ids = get_new_books()books = []for ids in book_ids.values():_books = get_book_info(ids)books.extend(_books)now = datetime.datetime.now()date = now.strftime('%Y-%m-%d')outpath = "data/books-{}.json".format(date)with open(outpath, "w", encoding="utf-8") as f:json.dump(books, f, indent=4, ensure_ascii=False)print("采集图书数量: {}".format(len(books)))print(" === 豆瓣新书速递 数据采集完成 ===")
  • 数据预处理

Jupyter Notebook


豆瓣新书速递数据预处理

import pandas as pd
import json
from pprint import pprint
import osprint("list of ../data")
for f in os.listdir("../data"):print("- ", f)
list of ../data
-  books-2020-06-17.json
-  books.json

1. 加载/预览数据

PATH = "../data/books.json"
with open(PATH, "r", encoding="utf-8") as f:books = json.load(f)print("												

豆瓣新书速递数据爬取与简单数据处理 | 豆瓣爬虫 python pandas相关推荐

  1. python爬取豆瓣短评_爬取并简单分析豆瓣电影短评

    导语 利用Python爬取并简单分析豆瓣电影短评. 说起来挺逗的,去年爬豆瓣短评的时候还是可以爬个几万条数据的,昨天我还想着终于可以起个唬人的标题了,什么爬取了xxx电影的xxx万条数据. 于是昨晚写 ...

  2. 房天下数据爬取及简单数据分析

    总第64篇 01|明确本次爬虫以及目的: 我是想看看太原的房地产情况,包括楼盘名称.价格.所处区域.评论数(一定程度上可以反映出该楼盘受欢迎程度). 明确了目的以后就该去寻找这些数据的出处,也就是网站 ...

  3. python分布式爬虫开题报告范文_基于Python的豆瓣Top250排行榜影片数据爬取和分析开题报告...

    一.选题依据:(简述研究现状,说明该毕业设计的设计目的及意义) 研究现状 Python是一门很全面的语言,又随着大数据和人工智能的兴起,广受爬虫设计者们的青眯.设计者们运用Python语言的框架-Sc ...

  4. 豆瓣排行250电影数据爬取

    # 查看当前挂载的数据集目录, 该目录下的变更重启环境后会自动还原 # View dataset directory. This directory will be recovered automat ...

  5. python爬取地图地址_网络爬虫-python爬取高德地图地点

    python爬取你想要的数据,近期由于业务需求,用python爬取了高德地图一些地点的数据,爬出来数据大致情况如下: image 下面是基本流程: 2.安装网络爬取第三方库,主要是下面三个(pip i ...

  6. 《流浪地球》影评数据爬取分析

    <流浪地球>影评数据爬取分析 人生苦短,我用Python. 阿巴阿巴阿巴,爬虫初学者,志在记录爬虫笔记,交流爬虫思路. 话不多说,开始进行操作. 对于电影数据影评的爬取,这里选取的网站是豆 ...

  7. 微博话题下的数据爬取

    1.前言 新浪微博中,一个话题下各个媒体或用户发表在平台发表的信息是舆情研究的一个很重要的数据来源,这里记录一下一个话题下数据的爬取方式,以"#美国疫情#"话题为例. 2.话题下数 ...

  8. 数据泄露、数据爬取......金融机构要如何保护催收场景下的数据安全?

    金融企业的贷后催收是指向借款人发送催收通知和采取其他措施,以确保借款人按时还款并追回逾期贷款的过程.这通常包括电话催收.信函催收.上门访问等方式.贷后催收通常由金融机构内部的专业团队或第三方专业催收公 ...

  9. 数据爬取大案例?——阿里巴巴诉南京码注公司数据抓取案​

    ​原告:杭州阿里巴巴广告有限公司 被告:南京码注公司 (2019)浙0108民初5049号 [案情] 1688系由原告阿里经营和提供网络服务的网络批发平台.阿里巴巴的企业诚信体系建立在用户授权搜集各类 ...

最新文章

  1. PubChem的Python接口PubChemPy
  2. python调用spark和调用hive_Spark(Hive) SQL数据类型使用详解(Python)
  3. Android自定义View详解,知乎上转疯了!
  4. MySQL中的全文索引
  5. antdesign 表单中的单选按钮处理
  6. uap连接oracle,UAP环境初始化操作手册Oralce版.pdf
  7. java多线程必须掌握吗_多线程模式有什么作用(java多线程必须掌握的知识)
  8. lucene解决全文检索word2003,word2007的办法
  9. IDEA 自动生成类注释和方法注释
  10. 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击 1
  11. 数字类型转换成字符串类型并逆序输出
  12. linux安装mysql配置,linux安装mysql,配置mysql文件
  13. ecshop 源码分析
  14. 网上零食销售系统(Java;JSP;JDBC)附源码+数据库+论文
  15. python图像锐化_(python 图像锐化教程)C 实现bmp图像锐化后,锐化的效果很差,求大神帮忙啊...
  16. 【代码重构】拒绝继承的遗赠(Refused Bequest)--如何处理子类无需使用到父类中的某些方法和变量的情况?
  17. 一招,提高 Github 成员微信群运营效率
  18. 为什么那么多人中途都放弃了
  19. OSS简单上传下载整理
  20. 仁兄:腾讯区块链学习后的一些粗浅观点

热门文章

  1. 什么?Sigfox还没入华就要收摊了?
  2. 【四足机器人那些事】足端轨迹规划(一)
  3. 弗洛伊德算法(求每一对顶点间的最短路径)
  4. vs code 简易使用教程(前端)
  5. mysql启动报错2002_Mysql启动报ERROR:2002的分析与解决
  6. pythoninput算出bmi_python菜鸡——BMI计算
  7. 1.软件工程—数据流图
  8. h5案例分享 京东:有爱圣诞 无限京喜
  9. 翡润年华教你肉眼鉴别翡翠ABC
  10. XILINX偶然加载不成功的问题原因及解决方法