从豆瓣图书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. vb写文件时报'Invalid procedure call or argument'

    原来的一段代码是这样的: Set fso3 = CreateObject("Scripting.FileSystemObject")                  'msgbo ...

  2. leetcode python两整数之和

    # Leetcode 371 两整数之和***### 题目描述 **不使用**运算符 `+` 和 `-` ​​​​​​​,计算两整数 `​​​​​​​a `.`b` ​​​​​​​之和. **示例1: ...

  3. oracle查询不显示小数点前的0

    1.问题起源       oracle 数据库字段值为小于1的小数时,使用char类型处理,会丢失小数点前面的0       例如0.35就变成了.35 2.解决办法:用to_char函数格式化数字显 ...

  4. Linux NIO 系列(03) 非阻塞式 IO

    目录 一.非阻塞式 IO 附:非阻塞式 IO 编程 Linux NIO 系列(03) 非阻塞式 IO Netty 系列目录(https://www.cnblogs.com/binarylei/p/10 ...

  5. pthread_create()的一个错误示例

    //pthread_create()函数的错误示例 //新建线程同时传入线程号.线程号总和和消息 #include <stdio.h> #include <pthread.h> ...

  6. KiCAD实用操作

    KiCAD实用操作之一:自动编辑线宽 今天偶然间发现的一个比较实用的功能,算是KiCAD的一个优点吧(或许是在AD上面没发现):当整个PCB布完线或者在布线过程中,我们有可能需要对某个线的宽度进行调整 ...

  7. 2017-2018 ACM-ICPC, Asia Tsukuba Regional Contest E:Black or White

    这道题可以比较容易看出是线性DP.设dp[i]代表把前i个格子刷成目标状态的最小步数. 写出状态转移方程 dp[i]=min( dp[j]+calc(j+1,i) ) (i-j<=k) calc ...

  8. Kafka速览

    一.基本结构 三台机器组成的Kafka集群,每台机器启动一个Kafka进程,即Broker 向broker发送消息的客户端是Producer,拉取消息的客户端是Consumer Producer和Co ...

  9. jQuery与Vue的区别、从jQuery到Vue框架优点总结

    一.两者的区别 1.数据与视图分离 2.数据驱动视图 二.从jQuery到Vue框架的总结 1.数据与视图分离,解耦 2.数据驱动视图,只关心数据,DOM操作已经被框架封装

  10. div框,左右拖动

    <script type="text/javascript"> function bindResize(el){ //初始化参数 var els = document. ...