豆瓣图书Top250
从豆瓣图书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的更多相关文章
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...
- 【Python数据分析】Python3操作Excel-以豆瓣图书Top250为例
本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录.旨在进行更多的爬虫实践练习以及模块学习. 工具 1.Python 3.5 2.Bea ...
- python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129
大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(st ...
- Python爬虫-爬取豆瓣图书Top250
豆瓣网站很人性化,对于新手爬虫比较友好,没有如果调低爬取频率,不用担心会被封 IP.但也不要太频繁爬取. 涉及知识点:requests.html.xpath.csv 一.准备工作 需要安装reques ...
- #1 爬虫:豆瓣图书TOP250 「requests、BeautifulSoup」
一.项目背景 随着时代的发展,国人对于阅读的需求也是日益增长,既然要阅读,就要读好书,什么是好书呢?本项目选择以豆瓣图书网站为对象,统计其排行榜的前250本书籍. 二.项目介绍 本项目使用Python ...
- 爬去豆瓣图书top250数据存储到csv中
from lxml import etree import requests import csv fp=open('C://Users/Administrator/Desktop/lianxi/do ...
- Python爬虫小白入门(七)爬取豆瓣音乐top250
抓取目标: 豆瓣音乐top250的歌名.作者(专辑).评分和歌曲链接 使用工具: requests + lxml + xpath. 我认为这种工具组合是最适合初学者的,requests比pytho ...
- 爬取豆瓣网图书TOP250的信息
爬取豆瓣网图书TOP250的信息,需要爬取的信息包括:书名.书本的链接.作者.出版社和出版时间.书本的价格.评分和评价,并把爬取到的数据存储到本地文件中. 参考网址:https://book.doub ...
随机推荐
- C. Ancient Berland Circus(三点确定最小多边形)
题目链接:https://codeforces.com/problemset/problem/1/C 题意:对于一个正多边形,只给出了其中三点的坐标,求这个多边形可能的最小面积,给出的三个点一定能够组 ...
- redis基本介绍搭建篇
1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...
- Node.js、vue.js的使用
Vue.js的使用 1.下载Node.js 2.打开cmd 3.执行命令 npm i 4.输入命令 npm run serve 5.浏览器打开 http://localhost:8080
- linux nohup python 后台运行无输出问题
参考:https://blog.csdn.net/zj360202/article/details/78894512 nohup python test.py & nohup python t ...
- nginx + gunicorn + django 2.0 踩坑
部署踩坑 部署踩坑提前准备服务器端准备安装nginx使用uwsgi部署使用gunicorn配置配置nginx配置django中的路径url 提前准备 在本地能够 python(3) manage.py ...
- Codeforces 1167F 计算贡献
题意:给你一个函数f,计算∑(i = 1 to n)(j = i to n) f(i, j).f(i, j)的定义是:取出数组中i位置到j位置的所有元素,排好序,然后把排好序的位置 * 元素 加起来. ...
- webpack output.publicPath
output.publicPath string function 对于按需加载(on-demand-load)或加载外部资源(external resources)(如图片.文件等)来说,outpu ...
- Android中App可分配内存的大小(转)
转自:http://blog.csdn.net/u011506413/article/details/50965435 现在真实测试结果: 1,为了搞清楚每个应用程序在Android系统中最多可分配多 ...
- PHP ftp_get_option() 函数
定义和用法 The ftp_get_option() 函数返回 FTP 连接的各种运行时选项. 语法 ftp_get_option(ftp_connection,option) 参数 描述 ftp_c ...
- html标签中的 MIME 类型
1.<script type="text/x-template"> MIME 类型 2.MIME类型是什么 : http://www.w3school.com.cn/ ...