从豆瓣图书Top250抓取数据,并通过词云图展示

导入库

from lxml import etree #解析库
import time #时间
import random #随机函数
import pandas as pd
import requests #请求库
import jieba #导入结巴分词
from pyecharts.charts import WordCloud
from pyecharts import options as opts

抓取数据

#循环构造网址
def format_url(base_url,pages=10):
urls=[]
for num in range(0,pages * 25,25):
urls.append(base_url.format(num))
return urls #解析单个页面
def parse_page(url,headers):
#创建一个存储结果的容器
result=pd.DataFrame()
html=requests.get(url,headers=headers)
bs=etree.HTML(html.text)
for i in bs.xpath('//tr[@class="item"]'):
#书籍中文名
book_ch_name=i.xpath('td[2]/div[1]/a[1]/@title')[0]
#评分
score=i.xpath('td[2]/div[2]/span[2]')[0].text
#书籍信息
book_info=i.xpath('td[2]/p[@class="pl"]')[0].text
#评价数量由于数据不规整,使用字符串方法进行数据处理
comment_num=i.xpath('td[2]/div[2]/span[3]')[0].text.replace(' ','').strip('(\n').strip('\n)')
try:
#一句话概括
brief=i.xpath('td[2]/p[@class="quote"]/span')[0].text
except:
brief=None
#这里的cache是存储每一循环的结果,然后通过下一步操作循环更新result里面的数据
cache=pd.DataFrame({'中文名':[book_ch_name],'评分':[score],'书籍信息':[book_info],'评价数量':[comment_num],'一句话概括':[brief]})
result=pd.concat([result,cache])
return result #主函数
def main():
final_result=pd.DataFrame()
base_url='https://book.douban.com/top250?start={}'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
urls=format_url(base_url,pages=10)
for url in urls:
res=parse_page(url,headers=headers)
final_result=pd.concat([final_result,res]) time.sleep(random.random()*3)
return final_result #运行函数
if __name__ == "__main__":
final_result = main()

提取词云图要展示的数据

#提取书名、评分、评价数量
book_top250=final_result[['中文名','评分','评价数量']] #将书名转为列表
book_name=book_top250['中文名'].tolist() #将评分转为列表
book_score=book_top250['评分'].tolist() #将评价人数转为列表
book_comment_num=book_top250['评价数量'].tolist()
#去除多余字符"人评价"
book_comment_num=[x.strip("人评价") for x in book_comment_num if x.strip()!=''] #用for循环合并数据
a=[z for z in zip(book_name,book_comment_num)]

绘图设置

c=(
#WordCloud类的实例化
WordCloud()
#添加图名称、数据、字体的随机大小、图像类型
.add("",a,word_size_range=[5,50],shape="diamond")
#设置标题
.set_global_opts(title_opts=opts.TitleOpts(title="豆瓣图书Top250"))
)

结果展示

c.render_notebook()

参考来源:
微信公众号:数据不吹牛(shujubuchuiniu)
https://blog.csdn.net/weixin_40864434/article/details/90301592

豆瓣图书Top250的更多相关文章

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

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

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

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

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

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

  4. Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

    大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(st ...

  5. Python爬虫-爬取豆瓣图书Top250

    豆瓣网站很人性化,对于新手爬虫比较友好,没有如果调低爬取频率,不用担心会被封 IP.但也不要太频繁爬取. 涉及知识点:requests.html.xpath.csv 一.准备工作 需要安装reques ...

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

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

  7. 爬去豆瓣图书top250数据存储到csv中

    from lxml import etree import requests import csv fp=open('C://Users/Administrator/Desktop/lianxi/do ...

  8. Python爬虫小白入门(七)爬取豆瓣音乐top250

      抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...

  9. 爬取豆瓣网图书TOP250的信息

    爬取豆瓣网图书TOP250的信息,需要爬取的信息包括:书名.书本的链接.作者.出版社和出版时间.书本的价格.评分和评价,并把爬取到的数据存储到本地文件中. 参考网址:https://book.doub ...

随机推荐

  1. C. Ancient Berland Circus(三点确定最小多边形)

    题目链接:https://codeforces.com/problemset/problem/1/C 题意:对于一个正多边形,只给出了其中三点的坐标,求这个多边形可能的最小面积,给出的三个点一定能够组 ...

  2. redis基本介绍搭建篇

    1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...

  3. Node.js、vue.js的使用

    Vue.js的使用 1.下载Node.js 2.打开cmd 3.执行命令 npm i 4.输入命令 npm run serve 5.浏览器打开  http://localhost:8080

  4. linux nohup python 后台运行无输出问题

    参考:https://blog.csdn.net/zj360202/article/details/78894512 nohup python test.py & nohup python t ...

  5. nginx + gunicorn + django 2.0 踩坑

    部署踩坑 部署踩坑提前准备服务器端准备安装nginx使用uwsgi部署使用gunicorn配置配置nginx配置django中的路径url 提前准备 在本地能够 python(3) manage.py ...

  6. Codeforces 1167F 计算贡献

    题意:给你一个函数f,计算∑(i = 1 to n)(j = i to n) f(i, j).f(i, j)的定义是:取出数组中i位置到j位置的所有元素,排好序,然后把排好序的位置 * 元素 加起来. ...

  7. webpack output.publicPath

    output.publicPath string function 对于按需加载(on-demand-load)或加载外部资源(external resources)(如图片.文件等)来说,outpu ...

  8. Android中App可分配内存的大小(转)

    转自:http://blog.csdn.net/u011506413/article/details/50965435 现在真实测试结果: 1,为了搞清楚每个应用程序在Android系统中最多可分配多 ...

  9. PHP ftp_get_option() 函数

    定义和用法 The ftp_get_option() 函数返回 FTP 连接的各种运行时选项. 语法 ftp_get_option(ftp_connection,option) 参数 描述 ftp_c ...

  10. html标签中的 MIME 类型

    1.<script type="text/x-template">  MIME 类型 2.MIME类型是什么 : http://www.w3school.com.cn/ ...