一、数据获取

本次项目数据来源为爬虫获取,目标为为当当网上关于python的书籍
爬虫主要思路:通过观察当当网,观察结构,选用适合的方法。先进行单页的数据爬取,再进行多页爬取;解析方法为xpath方法,爬取目标为:书名、价格、作业、出版社、出版时间、商品链接、评论数量;最后将爬取的数据保存到csv文件当中。
爬虫代码如下:

import requests
from lxml import etree
import re
import csv
def get_page():# 数据的多页爬取,经过观察,所有页面地址中,有一个唯一的参数page_index发生改变# 通过对参数page_index的for循环,遍历每一页的页面,实现多页爬取for page in range(1, 101):url = 'http://search.dangdang.com/?key=python&act=input&page_index=1' + str(page + 1) + '#J_tab'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}response = requests.get(url=url, headers=headers)parse_page(response)# 可以在操作页面实时观察爬取的进度print('page %s' % page)
def parse_page(response):# 通过etree将图书的七项信息封装为一条数据,保存到data列表当中tree = etree.HTML(response.text)li_list = tree.xpath('//ul[@class="bigimg"]/li')for li in li_list:data = []try:# 通过xpath的方法对所需要的信息进行解析# 1、获取书的标题,并添加到列表中title = li.xpath('./a/@title')[0].strip()data.append(title)# 2、获取价格,并添加到列表中price = li.xpath('./p[@class="price"]/span[1]/text()')[0]data.append(price)# 3、获取作者,并添加到列表中author = ''.join(li.xpath('./p[@class="search_book_author"]/span[1]//text()')).strip()data.append(author)# 4、获取出版社publis = ''.join(li.xpath('./p[@class="search_book_author"]/span[3]//text()')).strip()data.append(publis)# 5、获取出版时间,并添加到列表中time = li.xpath('./p[@class="search_book_author"]/span[2]/text()')[0]pub_time = re.sub('/', '', time).strip()data.append(pub_time)# 6、获取商品链接,并添加到列表中commodity_url = li.xpath('./p[@class="name"]/a/@href')[0]data.append(commodity_url)# 7、获取评论数量,并添加到列表中comment = li.xpath('./p[@class="search_star_line"]/a/text()')[0].strip()data.append(comment)except:passsave_data(data)def save_data(data):writer.writerow(data)
def main():key = 'python书籍222'  # input('Please input key:')
get_page(key)
# 将所有的数据储存到csv文件当中
fp = open('python书籍3.csv', 'w', encoding='utf-8-sig', newline='')
writer = csv.writer(fp)
header = ['书名', '价格', '作者', '出版社', '出版时间', '商品链接', '评论数量']
writer.writerow(header)
main()
fp.close()

爬虫部分结果展示:

二、数据整理分析

本项目对价格、出版社以及评论进行分析

1、价格

(1)数据预处理

通过观察爬取下来的数据发现,部分数据存在空值,影响分析,所以多价格列进行简单的数据预处理操作,将有空值的整条数据删除

利用pandas库中的null函数查询是否有空值,有空值就将其整条数据删除
import pandas as pd
# 读取文件
df = pd.read_csv(r'D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍.csv')
# 对价格列进行操作
index = df['价格'].notnull()
df = df[index]
# 将处理好的文件保存为python书籍2
df.to_csv(r'D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍2.csv')

(2)数据分类操作

然后对价格列进行分类,将其分为三个类别,分别为价格在30元以下的,价格在30元到70元之间的,价格在70元以上的,注意数据的数据的类型是什么,是否需要类型的转换。

import csv
# 打开存放书籍的文档并读取
file = open('D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍2.csv', encoding='utf-8')
fileReader = csv.reader(file)
data = []
# s1、s2、s3分别为30元以下,30到70元,70元以上
s1 = []
s2 = []
s3 = []
filedata = list(fileReader)
for i in filedata:# 选中价格的一列m = i[1:2]data.append(''.join(m))
for m in range(1,6000):# 将价格强制转换为float类型if float(data[m]) < 30.00:# 将价格低于30元的存放到s1s1.append(data[m])elif float(data[m]) > 70.00:# 价格将高于70元的存放到s3s3.append(data[m])else:# 将价格在30到70元的存放到s2s2.append(data[m])
# 同时输出s1、s2、s3的长度来代表其数量
print(len(s1))
print(len(s2))
print(len(s3))

(3)数据的聚类算法

同时对价格进行一个聚类算法的运用,主要作用为练习使用聚类算法

import jieba
import collections
import wordcloud
import matplotlib.pyplot as plt# 存放去停用词
stopword_list = []
# 存放分词
object_list = []
# 去停用词
for word in open("D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\stopwords.txt", 'rb'):stopword_list.append(word.strip())
# 文本分词
fn = open("D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\Comment_Data.txt", "rb").read()
seg_list_exaut = jieba.cut(fn)
for i in seg_list_exaut:if i.encode("utf-8") not in stopword_list:object_list.append(i)
# 词频统计、排序
word_counts = collections.Counter(object_list)
word_counts_top10 = word_counts.most_common(10)
print(word_counts_top10)
# 词图云展示
wc = wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',background_color="white",margin=5, width=1000,height=800,max_words=1000,max_font_size=200)
wc.generate_from_frequencies(word_counts)
wc.to_file('DangDangWang_WordCloud_show.jpg')
plt.imshow(wc)
plt.axis("off")
plt.show()

聚类算法的结果

2、出版社

对于出版社的分析主要为统计出版社的数量,并对每个出版社出版关于python的书籍的数量进行统计分析,因此需要对数据进行去重处理

(1)数据预处理

数据的去重处理

file = open('D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍.csv', encoding='utf-8')
fileReader = csv.reader(file)
filedata = list(fileReader)
data = []for i in filedata:# 数据表第四列为出版社t = i[3:4]data.append(''.join(t))# 去重
punlish_Number = len(set(data))
print('出版社共'+str(punlish_Number)+'个')
punlish_data = list(set(data))

(2)统计

对出版社的种类以及数量进行统计

# 统计出版社
dict = {}
for i in data:
dict[i] = dict.get(i,0)+1
# 输出所有的出版社以及个数
print(dict)
# print(len(dict))

结果展示

由结果可知出版社共有50个,选取前十名的出版社进行保存

3、评论数量

通过观察处理,发现存在很多数据没有评论,因此需要进行预处理
对没有评论数量的数据进行删除操作

import pandas as pd
# 读取文件
df = pd.read_csv(r'D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍.csv')
# 对价格列进行操作
index = df['评论数量'].notnull()
df = df[index]
df.to_csv(r'D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍3.csv')

结果展示

对评论数量进行排序,选取评论数量前十的书籍进行展示

三、数据可视化

1、价格

结果展示

代码

import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
labels = '30元以下', '30到70元', '70元以上'
fraces = [125, 3427, 2447]
# 使画出来的图形为标准圆
plt.axes(aspect=1)
# 突出分离出数量最多的第二部分
explode = [0, 0.1, 0]
colors = ['skyblue', 'pink', 'yellow']
plt.pie(x=fraces,labels=labels,colors=colors,# 显示比例autopct='%0f%%',explode=explode,# 显示阴影,使图形更加美观shadow=True)
plt.show()

2、出版社

结果展示

代码

import matplotlib.pyplot as plt# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = Falsenum_list = [1530, 1390, 1255, 625,194,100,99,95,93,93]
name_list = ['人民邮电出版社','机械工业出版社','电子工业出版社','清华大学出版社','北京大学出版社','中国水利水电出版社','中国铁道出版社','东南大学出版社','华中科技大学出版社','重庆大学出版社']
plt.barh(range(len(num_list)),num_list,align="center",# 设置标签tick_label=name_list,)
plt.title('出版社前十柱状图')
plt.show()

3、评论

本项分析选取评论数量第一的书,将其所有的评论进行了爬取,并制作词云图进行展示
评论爬取代码

file = open('D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\python书籍4.csv', encoding='utf-8')
fileReader = csv.reader(file)
filedata = list(fileReader)
books_number = []
for i in filedata:t = (i[5:6])books_number.append(''.join(t))
print(books_number)
for j in range(1, 6):for i in range(1, 21):url = 'http://product.dangdang.com/index.php?r=comment%2Flist&productId=' + books_number[j] + \       '&categoryPath=01.54.06.19.00.00&mainProductId=25580336&mediumId=0&pageIndex=' + str(i) + \             '&sortType=1&filterType=1&isSystem=1&tagId=0&tagFilterCount=0&template=publish'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/''87.0.4280.88 Safari/537.36'}print(url)req = urllib.request.Request(url, headers=headers)response = urllib.request.urlopen(req)unicodester = json.load(response)html = unicodester["data"]["list"]["html"]pattern = re.compile('<span><a href.*?>(.*?)<\/a><\/span>', re.S)comments = re.findall(pattern, html)print("正在爬取第" + str(i) + "页评论")with open('Comment_Data.txt', 'a') as txt:txt.write(str(comments) + "\n")

结果展示

因为我的停用词没有筛选好,导致制作出来的词云图不够规范,大家可以根据自己的需要对停用词进行添加
代码

import jieba
import collections
import wordcloud
import matplotlib.pyplot as plt# 存放去停用词
stopword_list = []
# 存放分词
object_list = []
# 去停用词
for word in open("D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\stopwords.txt", 'rb'):stopword_list.append(word.strip())
# 文本分词
fn = open("D:\pythonApp\pyproject\我的python\网络大数据采集\dangdang\Comment_Data.txt", "rb").read()
seg_list_exaut = jieba.cut(fn)
for i in seg_list_exaut:if i.encode("utf-8") not in stopword_list:object_list.append(i)
# 词频统计、排序
word_counts = collections.Counter(object_list)
word_counts_top10 = word_counts.most_common(10)
print(word_counts_top10)
# 词图云展示
wc = wordcloud.WordCloud(font_path=r'C:\Windows\Fonts\simhei.ttf',background_color="white",margin=5, width=1000,height=800,max_words=1000,max_font_size=200)
wc.generate_from_frequencies(word_counts)
wc.to_file('DangDangWang_WordCloud_show.jpg')
plt.imshow(wc)
plt.axis("off")
plt.show()

四、总结

本次项目做的比较仓租,看上去有些粗糙,有些细节和部分没有完全实现,以后有时间会对本项目进行完善翻新。同时欢迎大家与我进行交流,希望本次项目内容会对大家有所帮助。

参考:https://blog.csdn.net/qq_48967283/article/details/120898557

python课程设计——当当网Python图书数据分析相关推荐

  1. 在当当买了python怎么下载源代码-Python爬取当当网最受欢迎的 500 本书

    想看好书?想知道哪些书比较多人推荐,最好的方式就是看数据,接下来用 Python 爬取当当网五星图书榜 TOP500 的书籍,或许能给我们参考参考! Python爬取目标 爬取当当网前500本受欢迎的 ...

  2. python爬虫beautifulsoup爬当当网_利用python爬虫可视化分析当当网的图书数据!

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 Python版本:3.6.4 相关模块: requests模块: bs4模块: wordcloud模块 ...

  3. 利用python爬虫可视化分析当当网的图书数据

    导语 这周末就分享个小爬虫吧.利用Python爬取并简单地可视化分析当当网的图书数据. 开发工具 **Python版本:**3.6.4 相关模块: requests模块: bs4模块: wordclo ...

  4. Python课程设计-图书管理系统

    Python课程设计-图书管理系统 摘要 第一章 绪论 1.1 开发环境及技术 1.2 系统实现功能描述 第二章 功能详细设计与实现 2.1 系统框架各层次实现 2.1.1 可视页面设计 2 数据库设 ...

  5. python课程设计博客网_python 课程设计

    原博文 2019-12-09 14:56 − 泉州信息工程学院 软件学院 课程设计报告书 课 程 名: python课程设计 课程设计项目名称: &nb... 相关推荐 2019-09-28 ...

  6. Python课程设计大作业:获取比赛数据并进行机器学习智能预测NBA的比赛结果

    前言 该篇是之前遗漏的大三上的Python课程设计.刚好今天有空就补发了一篇文章.全部的代码在最后附录中.爬虫类的代码直接全部放到一起了,读者可以自行研究.百度网盘可以私聊我进行获取. 一.课程设计项 ...

  7. 北京交通大学Python课程设计大作业(四)——典籍词频统计

    北京交通大学Python课程设计大作业(四)--典籍词频统计 文章目录 北京交通大学Python课程设计大作业(四)--典籍词频统计 一.词频统计任务介绍 二.典籍词频统计python源代码如下 三. ...

  8. 夏敏捷第29本著作《Python课程设计》(微课视频版)

    Python课程设计-微课视频版 本书以Python 3.7为编程环境,逐步展开Python语言教学,是一本面向广大编程学习者的程序设计类图书.本书以案例为驱动介绍知识点,将Python知识点分解到不 ...

  9. python网络爬虫课程设计题目_山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》...

    山东建筑大学计算机网络课程设计<基于Python的网络爬虫设计> 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部) ...

  10. Python课程设计:图书馆管理系统

    图书馆管理系统: 基于python系统 引用库进行操作 系统主要实现: 添加书 删除书 借书 还书 查询图书信息 查询马上要归还的图书信息 按照借阅次序排序 源码简介: 对已图书信息进行更新操作,包括 ...

最新文章

  1. 我发现了一个非常酷的软件,用自然语言编程!
  2. V5SHOP网店系统V 8.0 仿京东模板
  3. FAST UA API
  4. JavaScript创建对象几种形式
  5. 如何为SharePoint添加一个简单地SMTP邮件发送服务器?
  6. 跟踪oracle中sql语句运行过程及相关知识拓展
  7. -Visual Studio 2010- IntelliTrace(智能跟踪)优化c盘
  8. javascript鼠标效果
  9. 什么是代码评审(Code Review)
  10. pl sql面试题_PL SQL面试问答
  11. VB.net chart 控件使用
  12. [Android] 【极其罕见】【安卓】视频转换器【支持18种格式转换!】
  13. Qt学习(一)ui界面的设计
  14. 微信小程序开发之动图小游戏是实现(代码篇)
  15. Nginx灰度升级实现说明
  16. JAVA 将byte数组类型的图片转换成换成JPEG格式
  17. VMware View中智能卡和证书身份验证
  18. 火车票服务端集成总结
  19. GitHub上传教程,图文并茂
  20. html 语言怎么弄英语,HTML语言,HTML language,音标,读音,翻译,英文例句,英语词典

热门文章

  1. 江南大学 超级计算机,基于分布式并行计算的高性能演化算法研究
  2. Mac OS中显示及隐藏文件和文件夹的方法
  3. 【大兴区亦庄亦庄线东晶国际4居室】自如网
  4. 恢复手机HTML文件,easyrecovery恢复手机误删文件方法
  5. zeros什么意思_zeros:zeros还是zeroes?4)是什么意思?
  6. DistilBert解读
  7. 如何使用Google TV设置Chromecast
  8. 畅快沟通,网易云信携手无忧行与途家让旅行一路惊喜
  9. 10天java基础学习笔记五
  10. Window上装Linux系统的便捷方法,简单又省事!