Python3获取豆瓣图书标签的前20本热门书籍(一)
介绍
第一篇主要获取豆瓣的大分类、大分类下的具体分类以及具体分类下的前20本热门书籍,第二篇对获取的数据进行分析。
准备
Python3.6、requests、BeautifulSoup4
演示
代码
# -*- coding: utf-8 -*-
# @Author: Sexy Phoenix
# @Last Modified by: Sexy Phoenix
import requests
from bs4 import BeautifulSoup, SoupStrainer
#内容解析类
class Parse:
#解析分类
def parse_tags(self, content):
only_div_tags = SoupStrainer('div', 'article')
soup = BeautifulSoup(content, 'lxml', parse_only=only_div_tags)
category = {}
sub_category = {}
# 解析大分类
tag_title_wrapper = soup.find_all('a', 'tag-title-wrapper')
for index,tag in enumerate(tag_title_wrapper):
category[index] = tag.get('name')
# 解析大分类下的具体分类
tagCol = soup.find_all('table', "tagCol")
for i,tag in enumerate(soup.find_all('table', "tagCol")):
a = tag.find_all('a')
sub_category[i] = []
for t in a:
sub_category[i].append(t.string)
return category, sub_category
#解析具体分类前20分书籍
def parse_detail_tag(self, content):
detail_conent = []
only_ul_tags = SoupStrainer('ul', 'subject-list')
soup = BeautifulSoup(content, 'lxml', parse_only=only_ul_tags)
for li in soup.find_all('li', 'subject-item'):
info = li.find('div', 'info')
title = info.h2.a.get('title')
star = info.find('span', 'rating_nums')
extra_info = info.h2.next_sibling.next_sibling.string.split('/')
author = extra_info[0].strip()
price = extra_info[-1].strip()
appraise = star.string
appraise_num = star.next_sibling.next_sibling.string.strip()
detail_conent.append({
'title': title,
'price': price,
'author': author,
'appraise':appraise,
'appraise_num': appraise_num
})
return detail_conent
#内容获取类
class Spider:
def __init__(self):
self.url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
self.tag_url = 'https://book.douban.com/tag/'
self.headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
self.parse = Parse()
#获取分类HTML内容
def get_all_tag(self):
data = requests.get(self.url, headers=self.headers)
if(data.status_code == requests.codes.ok):
return self.parse.parse_tags(data.text)
else:
print('[ERROR]: GET Category Error')
#获取书籍HTML内容
def get_detail_tag(self, tag_name):
data = requests.get(self.tag_url + tag_name, self.headers)
if(data.status_code == requests.codes.ok):
return self.parse.parse_detail_tag(data.text)
else:
print('[ERROR]: GET Sub Category Error')
#显示
def show(self):
category, sub_category = self.get_all_tag()
print('豆瓣大分类:')
for index,value in category.items():
i = index + 1
print("{0}、{1}".format(i, value))
try:
key = int(input('请输入您选择的大分类:')) - 1
sub_cate = sub_category[key]
for index in range(len(sub_cate)):
i = index + 1
print("{0}、{1}".format(i, sub_cate[index]))
try:
sub_key = int(input('请输入您选择的具体分类:')) - 1
tag_name = sub_cate[sub_key]
detail_content = self.get_detail_tag(tag_name)
for book in detail_content:
print('\n')
print(book['title'])
print("作者:{0}, 价格:{1}, 评分:{2}{3}".format(book['author'],book['price'], book['appraise'], book['appraise_num']))
print('='*50)
except:
print('[ERROR]: 具体分类选择错误')
except:
print('[ERROR]: 大分类选择错误')
#入口
if __name__ == '__main__':
spider = Spider()
spider.show()
Python3获取豆瓣图书标签的前20本热门书籍(一)的更多相关文章
- Linux运维之——每日小技巧,获取网站请求数的前20个IP
获取网站请求书的前20个IP |grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
- 获取占用fd最大的前20个进程
for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc ...
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...
- 【Python数据分析】Python3操作Excel-以豆瓣图书Top250为例
本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录.旨在进行更多的爬虫实践练习以及模块学习. 工具 1.Python 3.5 2.Bea ...
- python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式
一.项目目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式 二.确定页面内容 爬虫地址:https://movie.douban.co ...
- python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- 微信小程序之小豆瓣图书
最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...
- 微信小程序demo豆瓣图书
最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...
- #1 爬虫:豆瓣图书TOP250 「requests、BeautifulSoup」
一.项目背景 随着时代的发展,国人对于阅读的需求也是日益增长,既然要阅读,就要读好书,什么是好书呢?本项目选择以豆瓣图书网站为对象,统计其排行榜的前250本书籍. 二.项目介绍 本项目使用Python ...
随机推荐
- 网关我选 Spring Cloud Gateway
网关可提供请求路由与组合.协议转换.安全认证.服务鉴权.流量控制与日志监控等服务.可选的网关有不少,比如 Nginx.高性能网关 OpenResty.Linkerd 以及 Spring Cloud G ...
- 《Windows内核分析》专题-索引目录
该篇博客整理了<Windows内核分析>专题的各篇博文,方便查找. 一.保护模式 二.进程与线程 [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Cont ...
- 深入研究BufferedReader底层源码
目录 1 概述 2 BufferedReader源码分析 3 意外发现 1 概述 最近研究JDK IO流这一块源码,发现真的比较简单,而且还有很多意外发现,如果大家对JDK源码感兴趣,不妨从IO流这一 ...
- spring5 源码深度解析----- 被面试官给虐懵了,竟然是因为我不懂@Configuration配置类及@Bean的原理
@Configuration注解提供了全新的bean创建方式.最初spring通过xml配置文件初始化bean并完成依赖注入工作.从spring3.0开始,在spring framework模块中提供 ...
- GO 第一个程序Hello world
第一个程序:HelloWorld 一.go项目工程结构 配置好工作目录后,就可以编码开发了,在这之前,我们看下go的通用项目结构,这里的结构主要是源代码相应地资源文件存放目录结构. 1.1 gopat ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- Flask中的flash
一.简单的使用 - 必须要设置秘钥因为flash是基于session -设置:flash('aaa') -取值:get_flashed_message() #从源码我们可以看出get_flashed_ ...
- RF中的if判断
关键字run keyword if 格式如下: Run Keyword If 判断条件 其他关键字 ... ELSE IF 判断条件 其他关键字 ... ELSE ...
- C 自删除技术---批处理方式
#include<stdio.h> #include<windows.h>#pragma comment(linker, "/subsystem:\"win ...
- [Tyvj Jan]青蛙跳荷叶
题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 从前,有一个小青蛙决定去荷叶上练习跳跃.现在有n个荷叶排成一排,小青蛙一开始在最左 ...