介绍


第一篇主要获取豆瓣的大分类、大分类下的具体分类以及具体分类下的前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本热门书籍(一)的更多相关文章

  1. Linux运维之——每日小技巧,获取网站请求数的前20个IP

    获取网站请求书的前20个IP |grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20

  2. 获取占用fd最大的前20个进程

    for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc ...

  3. 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例

    基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...

  4. 【Python数据分析】Python3操作Excel-以豆瓣图书Top250为例

    本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录.旨在进行更多的爬虫实践练习以及模块学习. 工具 1.Python 3.5 2.Bea ...

  5. python爬虫实战 获取豆瓣排名前250的电影信息--基于正则表达式

    一.项目目标 爬取豆瓣TOP250电影的评分.评价人数.短评等信息,并在其保存在txt文件中,html解析方式基于正则表达式 二.确定页面内容 爬虫地址:https://movie.douban.co ...

  6. python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  7. 微信小程序之小豆瓣图书

    最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...

  8. 微信小程序demo豆瓣图书

    最近微信小程序被炒得很火热,本人也抱着试一试的态度下载了微信web开发者工具,开发工具比较简洁,功能相对比较少,个性化设置也没有.了解完开发工具之后,顺便看了一下小程序的官方开发文档,大概了解了小程序 ...

  9. #1 爬虫:豆瓣图书TOP250 「requests、BeautifulSoup」

    一.项目背景 随着时代的发展,国人对于阅读的需求也是日益增长,既然要阅读,就要读好书,什么是好书呢?本项目选择以豆瓣图书网站为对象,统计其排行榜的前250本书籍. 二.项目介绍 本项目使用Python ...

随机推荐

  1. Laravel Entrust 权限管理扩展包的使用笔记

    简介 Entrust 是一个简洁而灵活的基于角色进行权限管理的 Laravel 扩展包.针对 Laravel 5,官方推荐的安装版本是 5.2.x-dev.它的详细使用方法请查看 Entrust Gi ...

  2. Android 总结:ContentProvider 的使用

    一.概述 ContentProvider:为存储和获取数据提供统一的接口,可以在不同的应用程序之间共享数据. Android内置的许多数据都是使用ContentProvider形式,供开发者调用的 ( ...

  3. 《Windows内核分析》专题-索引目录

    该篇博客整理了<Windows内核分析>专题的各篇博文,方便查找. 一.保护模式 二.进程与线程 [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Cont ...

  4. 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用

    0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...

  5. 生成函数(TBC)

    生成函数 生成函数 (Generating Function) 的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项. 对于一个数列 aaa,称f(x)=∑i=0n ...

  6. TensorFlow2.0(8):误差计算——损失函数总结

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  7. Git推送到多个远程仓库

    Git推送到多个远程仓库 Grey 原文地址 准备工作 在码云和Github上分别新建两个不包括任何文件的空仓库(若是两个已经有文件的仓库,请参见关联已经存在的项目) https://github.c ...

  8. 技术分享:Dapr,让开发人员更轻松地构建微服务应用

    最近一直在学习微服务相关的技术.微服务架构已成为构建云原生应用程序的标准,并且可以预见,到2022年,将有90%的新应用程序采用微服务架构.微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合 ...

  9. 图论-最小生成树<Kruskal>

    昨天: 图论-最小生成树<Dijkstra,Floyd> 以上是昨天的Blog,有需要者请先阅读完以上再阅读今天的Blog. 可能今天的有点乱,好好理理,认真看完相信你会懂得 然而,文中提 ...

  10. MyBatis 示例-缓存

    MyBatis 提供两种类型的缓存,一种是一级缓存,另一种是二级缓存,本章通过例子的形式描述 MyBatis 缓存的使用. 测试类:com.yjw.demo.CacheTest 一级缓存 MyBati ...