介绍


第一篇主要获取豆瓣的大分类、大分类下的具体分类以及具体分类下的前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. Flask学习之旅--Flask项目部署

    一.写在前面 Flask 作为一个轻量级的 Web 框架,具有诸多优点,灵活方便,扩展性强,开发文档也很丰富.在开发调试的过程中,我们往往会使用 Flask 自带的 Web 服务器,但如果要投入到生产 ...

  2. SQL SERVER数据库日常使用总结

    以下内容为平时工作自己个人总结,仅供参考,欢迎交流 SELECT A.CBM,A.CMC,SUM(B.MJE)MJE FROM YXHIS..TBZDZTHZ A,YXHIS..TBZDZTMX B ...

  3. Windows 服务程序(二)

    服务控制管理器 (SCM, Service Control Manager),它在系统启动时自动启动,其主要作用是维护和管理一张服务信息表. OpenSCManager() 介绍:功能:建立了一个到服 ...

  4. Codeforces1141F_Same Sum Blocks

    题意 给定一个序列,求最多的不相交区间满足区间和相同. 分析 从暴力的角度想,是枚举区间再求和,反过来想,直接记录每个和对应是那些区间,然后排个序求最大不相交即可. 代码 #include <b ...

  5. 实验吧之【who are you?】(时间盲注)

    地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 这道题点开看见your ip is :xxx.xxx.xx.xxx 试了一些 最后发现是XFF ...

  6. css 文字间距

    letter-spacing :  字与字之间的距离 text-indent : 行的抬头间距 line-height : 行高度

  7. [LUOGU2964] [USACO09NOV]硬币的游戏A Coin Game

    题目描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game c ...

  8. c语言1博客作业02

    c语言1博客作业02 这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪 [作业要求](https://edu.cnblogs.com/campus/zswxy/SE2019-2/homewor ...

  9. Linux用到的常用命令

    Linux常用命令        

  10. 说说babel

    一.什么是babel 二.如何配置 三.配置babel-polyfill 一.什么是babel The compiler for writing next generation JavaScript. ...