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 ...
随机推荐
- Github配合Jenkins,实现vue等前端项目的自动构建与发布
本篇文章前端项目以vue为例(其实前端工程化项目的操作方法都相同),部署在Linux系统上(centos). 之前做前端项目的部署,一直都是手动运行打包命令,打包完.再使用FTP.Xshell等这类的 ...
- SpringBoot系列:Spring Boot使用模板引擎Thymeleaf
一.Java模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. 在jav ...
- 最简单的JS实现json转csv
工作久了,总会遇到各种各样的数据处理工作,比如同步数据,初始化一些数据,目前比较流行的交互数据格式就是JSON,可是服务器中得到的JSON数据如果提供给业务人员看的话可能会非常不方便,这时候,转成CS ...
- 在线影视平台人人影视 v3.2.1 绿色便携版
人人影视是一款可以方便观看美剧和国外大片的视频播放软件,支持在线观看.网盘转存.离线缓存.所有客户端离线下载均加密传输,不用担心任何安全问题.全程加密的 P2P 传输,让热门资源下载更快,海外党不再惧 ...
- POJ - 2393Yogurt factory
The cows have purchased a yogurt factory that makes world-famous Yucky Yogurt. Over the next N (1 &l ...
- C# 获取顶级(一级)域名方法
/// <summary> /// 获取域名的顶级域名 /// </summary> /// <param name="domain">< ...
- Vue3都使用Proxy了,你更应该了解Proxy
vue3.0的pre-alpha版代码已经开源了,就像作者之前放出的消息一样,其数据响应这一部分已经由ES6的Proxy来代替Object.defineProperty实现,感兴趣的同学可以看其实现源 ...
- 正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码)
1.引言 说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的.顾名思义就是证明是否还活着的依据. 什么场景下需要心跳呢?目前我们接触到的大多是一些基于长连接的应用需要心跳来“ ...
- PHP弱性处理0e开头md5哈希字符串缺陷/bug
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他 ...
- Web安全之CSRF漏洞整理总结
这两天整理和编写了csrf的靶场,顺便也复习了以前学习csrf的点,这里记录下学习的总结点. 0x01 关于CSRF 跨站请求伪造 CSRF(Cross-site request forgery)跨站 ...