豆瓣图书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 ...
随机推荐
- cesium默认全屏按钮自定义
cesium默认全屏按钮自定义 1 隐藏默认的svg 2 修改它默认的按钮边框,背景 3 修改它点击时的样式 代码如下: .cesium-viewer-fullscreenContainer ...
- JS检查断网
window.addEventListener('load', function() { function updateOnlineStatus(event) { var condition = na ...
- 力扣算法——138CopyListWithRandomPointer【M】
A linked list is given such that each node contains an additional random pointer which could point t ...
- java入门之:Hello World
import java.util.Scanner; public class HelloWorld{ public static void main(String[] args){ //向终端打印he ...
- CVE-2010-4258漏洞分析
Nelson Elhage最近发现了一个内核设计上的漏洞, 通过利用这个漏洞可以将一些以前只能dos的漏洞变成可以权限提升的漏洞. 当fork一个进程在的时候, copy_process执行如下操作: ...
- centos6系列更换阿里yum源
1.首先备份原来的cent os官方yum源 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2. ...
- LeetCode Array Easy169. Majority Element
Description Given an array of size n, find the majority element. The majority element is the element ...
- SSD网络结构
SSD算法,其英文全名是Single Shot MultiBox Detector. SSD的网络结构流程如下图所示:SSD总共11个block,相比较于之前的VGG16,改变了第5个block的第4 ...
- Begin at this time
学习了一段时间的Python,今天终于下定决心建立博客来记录自己的机器学习之路了.希望这是一个好的开始,希望自己永远不放弃,坚持努力下去.
- CSP 初赛复习 密码
CSP 初赛复习 密码是\(xj\)机房学生端密码