豆瓣图书Top250

Posted hankleo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了豆瓣图书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的主要内容,如果未能解决你的问题,请参考以下文章

爬取豆瓣电影Top250和和豆瓣图书

爬取豆瓣网图书TOP250的信息

爬虫-爬取豆瓣图书TOP250

爬虫爬取豆瓣图书TOP250

Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

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