大数跨境
0
0

Python应用之豆瓣图书评分排名爬取与分析

Python应用之豆瓣图书评分排名爬取与分析 数据皮皮侠
2020-07-05
2
导读:微信公众号:数据皮皮侠如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传内容目录:豆瓣图书评分排名爬取与分析

微信公众号:数据皮皮侠
如果你觉得该公众号对你有帮助,欢迎关注、推广和宣传

内容目录:豆瓣图书评分排名爬取与分析

作者团:张剑桥 李欣意 张沁逸 赵茂涵 梁秋婷

(一)数据爬取部分代码

import csv
from lxml import etree
import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

f = open('doubanTop250.csv''wt', newline='', encoding='UTF-8')   #创建csv文件
writer = csv.writer(f)
writer.writerow(('name''url''author''publisher''date''price''rate','comment'))

urls = ["https://book.douban.com/top250?start={}"\
        .format(str(i)) for i in range(0,226,25)]   #构造url列表

for url in urls:
    print('正在爬取'+url)
    r = requests.get(url, headers=headers)
    selector = etree.HTML(r.text)
    infos = selector.xpath('//tr[@class="item"]')   #取大标签,以此循环
    for info in infos:
        name = info.xpath('td/div/a/@title')[0]
        url = info.xpath('td/div/a/@href')[0]
        book_infos = info.xpath('td/p/text()')[0]
        author = book_infos.split('/')[0]
        publisher = book_infos.split('/')[-3]
        date = book_infos.split('/')[-2]
        price = book_infos.split('/')[-1]
        rate = info.xpath('td/div/span[2]/text()')[0]
        comments = info.xpath('td/p/span/text()')
        comment = comments[0if len(comments) != 0 else "空"

        writer.writerow((name,url,author,publisher,date,price,rate,comment))

f.close()


(二)数据分析及可视化的代码

# -*- coding: utf-8 -*-
"""
Created on Fri Jun 12 03:00:08 2020

@author: HP
"""


import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('C:\\Users\\10121\\Desktop\\python\\doubanTop250.csv')
df.head()
df['year'] = df.date.str[:5]#处理出版时间
df.head()
df[df.rate>=9.0].sort_values(by='rate',ascending=False)[:10]#评分前十降序排列
df.rate.hist(bins=12)#显示大部分书籍评分情况
publisher_df = df.groupby('publisher').rate.agg(['count','mean']).sort_values(by='count',ascending=False)[:10]
publisher_df.plot.barh(color=['r','g','b''c''m''y'])
plt.title("出版的书籍数量排名前10的出版社分布情况",fontsize=20)
author_df = df.groupby('author').name.count().sort_values(ascending=False).head(20)
author_df.plot.barh(color=['r','g','b''c''m''y'])#作者书籍数量
plt.title("书籍数量排名前10的作者分布情况",fontsize=20)
year_df = pd.DataFrame(df.groupby(['year']).agg({'rate':'mean','name':'count'}))#各年份产出的书籍数量
year_df.plot.bar()
plt.title("各年份产出的书籍数量分布情况",fontsize=20)
#制作评论词云
import jieba.analyse
from wordcloud import WordCloud
from functools import reduce
from pylab import *
import matplotlib.pyplot as plt
font = r'C:\\Windows\\Fonts\\STFANGSO.TTF'
g = lambda x,y:x+y
m = reduce (g,df_clean['comment'])
result = jieba.analyse.textrank(m, topK=50, withWeight=True)
keywords = dict()
for i in result:
    keywords[i[0]] = i[1]
wc = wordcloud.WordCloud(
    font_path=font,
    scale=1.5
)
wc.generate_from_frequencies(keywords)
plt.axis('off')
plt.imshow(wc)

   上面的code在实现的过程中需要进行部分修改,例如数据读取的地址.。

【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读615
粉丝0
内容2.1k