豆瓣读书top250数据爬取与可视化
爬虫–scrapy
题目:根据豆瓣读书top250,根据出版社对书籍数量分类,绘制饼图
搭建环境
import scrapy
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
加载scrapy框架
#terminal 终端实现
cd .. # 跳转到上一层目录
scrapy startproject booktop # 和项目同名的scrapy框架项目
setting配置
ROBOTSTXT_OBEY = False # 君子协议 false 不遵守
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
DOWNLOAD_DELAY = 0.5 # 下载延迟## 如何改变文本的样式
spider编写
#spiders文件夹下创建python文件 bookspider.py
import scrapy
from booktop.items import BookItem
class BookSpider(scrapy.Spider):
name="bookspider"
allowed_domains=['book.douban.com']
start_urls=['https://book.douban.com/top250']
def parse(self, response, **kwargs):
print(response.text) # 测试页面
测试:
#在terminal终端进行
cd booktop # 进入项目文件夹
scrapy crawl bookspider # 运行项目下的爬虫(和name的值保持一致)
# 测试成功,看到页面代码
获取数据(书名+出版社)
需要导入BookItem类 文件开头导入 from booktop.items import BookItem
def parse(self, response, **kwargs):
#print(response.text)
# table 一个table一本书
tables=response.xpath('//table') # css也可以
# print('书籍个数',len(tables))
# print(tables)
for t in tables:
#提取 extract()[0]
tit=t.css('div.pl2 a::attr(title)').extract()[0]
# print(title) 书名
pu=t.css('p.pl::text').extract()[0]
pu=pu.split('/')[-3].strip()
#print(pub) 出版社
yield BookItem(title=tit,pub=pu)
需要使用item对象完成数据封装并传输
#items.py书写书类
class BookItem(scrapy.Item):
#define the fields for your item here like:
title = scrapy.Field()
pub=scrapy.Field()
pass
pipeline 管道存储数据
# 在setting文件下,解开注释
ITEM_PIPELINES = {
'booktop.pipelines.BooktopPipeline': 300,
}
数据存储到txt文件下
# 打开管道文件 BooktopPipeline
class BooktopPipeline:
def process_item(self, item, spider):
# 编码格式设置为utf-8
file=open('result.txt','a+',encoding='utf-8')
file.write(item['title']+','+item['pub']+'\n')
return item
# 运行测试结果result.txt下有数据成功
分析和可视化
# 在项目中创建 分析文件 demo1.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
# 处理中文字体
font = {'family': 'microsoft yahei',
'weight': 'bold',
'size': 12}
matplotlib.rc('font',**font)
# 读取文件
df=pd.read_csv('result.txt',names=['title','pub'])
# print(df)
# 福尔摩斯探案集 出版社有问题,手动修改
df.loc[8,'pub']='群众出版社'
# print(df)
# 按出版社不同分类汇总书数量,取出前5名
result=df['pub'].value_counts().head()
print(result)
plt.pie(result,labels=result.index,autopct='%3.1f%%')
plt.show()
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
豆瓣读书top250数据爬取与可视化的更多相关文章
- 用python写一个豆瓣短评通用爬虫(登录、爬取、可视化)
原创技术公众号:bigsai,本文在1024发布,祝大家节日快乐,心想事成. @ 目录 前言 登录 爬取 储存 可视化分析 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块. ...
- Python小爬虫——抓取豆瓣电影Top250数据
python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...
- python+echarts+flask实现对全国疫情数据的爬取并可视化展示
用Python进行数据爬取并存储到数据库,3.15学习总结(Python爬取网站数据并存入数据库) - 天岁 - 博客园 (cnblogs.com) 通过echarts+flask实现数据的可视化展示 ...
- python实现人人网用户数据爬取及简单分析
这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据( ...
- 豆瓣电影Top250基本信息抓取
豆瓣电影Top250基本信息抓取 最近想看电影,但是想看一些有营养的,所以就去豆瓣上看电影评分,但是豆瓣上的评分没有排序,所以就用python把网站内容爬下来了,然后按评分做了排序.具体代码参见git ...
- 用Python介绍了企业资产情况的数据爬取、分析与展示。
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张耀杰 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- Web Scraper——轻量数据爬取利器
日常学习工作中,我们多多少少都会遇到一些数据爬取的需求,比如说写论文时要收集相关课题下的论文列表,运营活动时收集用户评价,竞品分析时收集友商数据. 当我们着手准备收集数据时,面对低效的复制黏贴工作,一 ...
- 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取
本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...
- Python爬虫 股票数据爬取
前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...
随机推荐
- vulnhub: DC 4
信息收集: yurang@kali:~$ nmap -sn 192.168.76.1/24 Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-04 ...
- Golang 实现 Redis(7): Redis 集群与一致性 Hash
本文是使用 golang 实现 redis 系列的第七篇, 将介绍如何将单点的缓存服务器扩展为分布式缓存.godis 集群的源码在Github:Godis/cluster 单台服务器的CPU和内存等资 ...
- python接口测试4-数据库获取参数
首先确定需要传递的参数和接口,使用接口测试工具验证一下,接口和参数没有问题. 编写python接口脚本 import requests import unittest import json impo ...
- Acwing 245.你能回答这些问题吗
题目描述 给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1."1 x y",查询区间 [x,y] 中的最大连续子段和,即 maxx≤l≤r≤y{∑ri=lA[i ...
- keras实现MobileNet
利用keras实现MobileNet,并以mnist数据集作为一个小例子进行识别.使用的环境是:tensorflow-gpu 2.0,python=3.7 , GTX-2070的GPU 1.导入数据 ...
- iOS如何实现语音播报及后台播放
最近项目刚刚交付,偶然间用到了语音播报和语音搜索的功能.语音搜索我用的是讯飞的demo,感觉效果还不错,感兴趣的话可以去官网上面下载demo,里面讲的特别的详细,不过稍显麻烦一些.语音播报讯飞也有de ...
- 求1-1e11内的素数个数(HDU 5901 Count primes )
参考链接:https://blog.csdn.net/Dylan_Frank/article/details/54428481 #include <bits/stdc++.h> #defi ...
- C++调用C接口
目录 C++调用C代码 解决调用失败问题 思考:那C代码能够被C程序调用吗 C代码既能被C++调用又能被C调用 C++调用C代码 一个C语言文件p.c #include <stdio.h> ...
- CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
1 下载字体 可以在网上下载,也可以在 windows 目录下(C:\Windows\Fonts)找到对应字体,这里是从另一套系统上 copy simsun.ttf 文件. 2 查看当前系统中已安装的 ...
- Spring Cloud Alibaba 初体验(三) Nacos 与 Dubbo 集成
一.新建项目 新建项目,只放置接口,用于暴露 Dubbo 服务接口 public interface GreetingService { String greeting(); } 二.provider ...