爬虫–scrapy

题目:根据豆瓣读书top250,根据出版社对书籍数量分类,绘制饼图

搭建环境

  1. import scrapy
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt

加载scrapy框架


  1. #terminal 终端实现
  2. cd .. # 跳转到上一层目录
  3. scrapy startproject booktop # 和项目同名的scrapy框架项目

setting配置

  1. ROBOTSTXT_OBEY = False # 君子协议 false 不遵守
  2. USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
  3. (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
  4. DOWNLOAD_DELAY = 0.5 # 下载延迟## 如何改变文本的样式

spider编写


  1. #spiders文件夹下创建python文件 bookspider.py
  2. import scrapy
  3. from booktop.items import BookItem
  4. class BookSpider(scrapy.Spider):
  5. name="bookspider"
  6. allowed_domains=['book.douban.com']
  7. start_urls=['https://book.douban.com/top250']
  8. def parse(self, response, **kwargs):
  9. print(response.text) # 测试页面

测试:

  1. #在terminal终端进行
  2. cd booktop # 进入项目文件夹
  3. scrapy crawl bookspider # 运行项目下的爬虫(和name的值保持一致)
  4. # 测试成功,看到页面代码

获取数据(书名+出版社)

  1. 需要导入BookItem 文件开头导入 from booktop.items import BookItem
  2. def parse(self, response, **kwargs):
  3. #print(response.text)
  4. # table 一个table一本书
  5. tables=response.xpath('//table') # css也可以
  6. # print('书籍个数',len(tables))
  7. # print(tables)
  8. for t in tables:
  9. #提取 extract()[0]
  10. tit=t.css('div.pl2 a::attr(title)').extract()[0]
  11. # print(title) 书名
  12. pu=t.css('p.pl::text').extract()[0]
  13. pu=pu.split('/')[-3].strip()
  14. #print(pub) 出版社
  15. yield BookItem(title=tit,pub=pu)

需要使用item对象完成数据封装并传输

  1. #items.py书写书类
  2. class BookItem(scrapy.Item):
  3. #define the fields for your item here like:
  4. title = scrapy.Field()
  5. pub=scrapy.Field()
  6. pass

pipeline 管道存储数据

  1. # 在setting文件下,解开注释
  2. ITEM_PIPELINES = {
  3. 'booktop.pipelines.BooktopPipeline': 300,
  4. }

数据存储到txt文件下

  1. # 打开管道文件 BooktopPipeline
  2. class BooktopPipeline:
  3. def process_item(self, item, spider):
  4. # 编码格式设置为utf-8
  5. file=open('result.txt','a+',encoding='utf-8')
  6. file.write(item['title']+','+item['pub']+'\n')
  7. return item
  8. # 运行测试结果result.txt下有数据成功

分析和可视化

  1. # 在项目中创建 分析文件 demo1.py
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. import matplotlib
  6. # 处理中文字体
  7. font = {'family': 'microsoft yahei',
  8. 'weight': 'bold',
  9. 'size': 12}
  10. matplotlib.rc('font',**font)
  11. # 读取文件
  12. df=pd.read_csv('result.txt',names=['title','pub'])
  13. # print(df)
  14. # 福尔摩斯探案集 出版社有问题,手动修改
  15. df.loc[8,'pub']='群众出版社'
  16. # print(df)
  17. # 按出版社不同分类汇总书数量,取出前5名
  18. result=df['pub'].value_counts().head()
  19. print(result)
  20. plt.pie(result,labels=result.index,autopct='%3.1f%%')
  21. plt.show()

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
    想要获取更多Python学习资料可以加
    QQ:2955637827私聊
    或加Q630390733
    大家一起来学习讨论吧!

豆瓣读书top250数据爬取与可视化的更多相关文章

  1. 用python写一个豆瓣短评通用爬虫(登录、爬取、可视化)

    原创技术公众号:bigsai,本文在1024发布,祝大家节日快乐,心想事成. @ 目录 前言 登录 爬取 储存 可视化分析 前言 在本人上的一门课中,老师对每个小组有个任务要求,介绍和完成一个小模块. ...

  2. Python小爬虫——抓取豆瓣电影Top250数据

    python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...

  3. python+echarts+flask实现对全国疫情数据的爬取并可视化展示

    用Python进行数据爬取并存储到数据库,3.15学习总结(Python爬取网站数据并存入数据库) - 天岁 - 博客园 (cnblogs.com) 通过echarts+flask实现数据的可视化展示 ...

  4. python实现人人网用户数据爬取及简单分析

    这是之前做的一个小项目.这几天刚好整理了一些相关资料,顺便就在这里做一个梳理啦~ 简单来说这个项目实现了,登录人人网并爬取用户数据.并对用户数据进行分析挖掘,终于效果例如以下:1.存储人人网用户数据( ...

  5. 豆瓣电影Top250基本信息抓取

    豆瓣电影Top250基本信息抓取 最近想看电影,但是想看一些有营养的,所以就去豆瓣上看电影评分,但是豆瓣上的评分没有排序,所以就用python把网站内容爬下来了,然后按评分做了排序.具体代码参见git ...

  6. 用Python介绍了企业资产情况的数据爬取、分析与展示。

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张耀杰 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  7. Web Scraper——轻量数据爬取利器

    日常学习工作中,我们多多少少都会遇到一些数据爬取的需求,比如说写论文时要收集相关课题下的论文列表,运营活动时收集用户评价,竞品分析时收集友商数据. 当我们着手准备收集数据时,面对低效的复制黏贴工作,一 ...

  8. 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取

    本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...

  9. Python爬虫 股票数据爬取

    前一篇提到了与股票数据相关的可能几种数据情况,本篇接着上篇,介绍一下多个网页的数据爬取.目标抓取平安银行(000001)从1989年~2017年的全部财务数据. 数据源分析 地址分析 http://m ...

随机推荐

  1. python应用(1):安装与使用

    程序员的基本工作是写程序,而写程序要用到编程语言,编程语言可以分为编译型语言跟解释型语言. 编译型语言,就是在执行代码之前,先把源代码编译(加链接)成另一种形式的代码,比如目标代码,或字节码,这种代码 ...

  2. Apiview+serallizers

    1.APIVIEW使用 https://www.cnblogs.com/xiaonq/p/10124104.html ModelVIewSet是对APIView封装 ModelSerializer是对 ...

  3. rsync单项同步

    配置rsync+inotify实时单向同步 定期同步的缺点: 执行备份的时间固定,延期明显,实时性差 当同步源长期不变化时,密集的定期任务是不必要的(浪费资源) 实时同步的优点: 一旦同步源出现变化, ...

  4. LaTex源文件的基本结构

    默认编译器设置: Utf-8设置: 相关代码与注释: 显示效果:

  5. DockerFile理解与应用

    1.DockerFile是什么? DockerFile是用来构建Docker镜像的构建文件,一般分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令,'#' 为 Dockerfile ...

  6. 第7.14节 Python类中的实例方法详析

    第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体 ...

  7. 转:浅谈HTTP中Get、Post、Put与Delete的区别

    1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影响资源的内容,即该请求不会产生副作用.无论进行多少次操 ...

  8. PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件添加选项卡的addTab和insertTab方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTabWidget添加选项卡的方法可用使用addTab方法和insertTab方法. 1.增加选项 ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的toolTip、toolTipDuration、statusTip、whatsThis属性

    toolTip属性 toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息.默认情况下,仅显示活动窗口子部件的toolTip,可以通过在 ...

  10. v-clickoutsides

    //点击目标元素外侧触发特定事件 使用 v-clickoutsides="clickHandler" import Vue from 'vue' Vue.directive('cl ...