博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
豆瓣图书Top250
阅读量:4359 次
发布时间:2019-06-07

本文共 2508 字,大约阅读时间需要 8 分钟。

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

导入库

from lxml import etree #解析库import time #时间import random #随机函数import pandas as pdimport requests #请求库import jieba #导入结巴分词from pyecharts.charts import WordCloudfrom 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()

793818-20190825183757803-1239559604.png

参考来源:

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

转载于:https://www.cnblogs.com/hankleo/p/11408811.html

你可能感兴趣的文章
新建Oracle数据库
查看>>
动态计算UITableViewCell高度详解 (转)
查看>>
后缀数组详解+模板
查看>>
洛谷P1731 生日蛋糕
查看>>
Redis类型
查看>>
编程之美----求二进制数中1的个数
查看>>
COGS 577 蝗灾
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE ra
查看>>
sql: left join vs. not in
查看>>
Jasper之table报表
查看>>
基于visual Studio2013解决C语言竞赛题之1061最大值和次最大值
查看>>
惊艳!9个不可思议的 HTML5 Canvas 应用试验
查看>>
12款很酷的使用大头照的国外名片设计作品
查看>>
Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】
查看>>
数据分析的一些误区
查看>>
C语言函数及变量的声明与定义的区别
查看>>
css 把图片变成灰色
查看>>
mongoDB安装与添加服务
查看>>
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())...
查看>>
TOJ 2732存钱计划(三)(单源最短路)
查看>>