由于刚上完了商业智能实训的课程,根据老师的要求我们做了一个完整的项目。

1. 项目要求与内容

项目具体要求:利用python爬取数据并进行清洗和预处理,将清洗后的数据存到数据库中,后端利用Java或是其他语言,最终利用Echarts实现数据可视化效果。

完成项目基本内容

  1. 爬取豆瓣读书top250网页上相关信息;
  2. 对爬取保存下来的数据文件进行清洗和预处理;
  3. 将清洗好的数据导入数据库;
  4. 进行需求分析,对要实现的数据可视化效果进行分析,创建相应的数据库表并导入数据;
  5. 选用Java语言进行后端管理:
  • 首先进行项目准备工作;
  • 然后依次实现对实体类、持久层、业务层、web层、前端页面的开发。

2. 开发工具及相关技术

  • pycharm——xpath
  • navicat for MySQL
  • Maria DB / MySQL
  • eclipse——Ajax+Tomcat

3. python豆瓣读书top250数据爬取

3.1 数据爬取前期准备

3.1.1 分析url


这里只需要将start后面所传的数值进行修改即可。从0开始,每页25条书籍信息。

3.1.2 爬取信息


在这里我们要爬取的数据信息为

  • 书名
  • 链接
  • 图片
  • 国家
  • 作者
  • 出版社
  • 出版时间
  • 价格
  • 星级
  • 评分
  • 评价人数
  • 简介

3.1.3 分析网页源代码


以上图评价人数为例,这里运用到了xpath对数据信息进行定位,找到所在的标签。

3.2 数据爬取

这里不细节讲,下面的代码里面有具体内容和注释

# 1. 导入库包
import requests
from lxml import etree
from time import sleep
import os
import pandas as pd
import reBOOKS = []
IMGURLS = []# 2. 获取网页源代码
def get_html(url):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'}# 异常处理try:html = requests.get(url, headers=headers)# 声明编码方式html.encoding = html.apparent_encoding# 判断if html.status_code == 200:print('成功获取源代码')# print(html.text)except Exception as e:print('获取源代码失败:%s' % e)# 返回htmlreturn html.text# 3. 解析网页源代码
def parse_html(html):html = etree.HTML(html)# 每个图书信息分别保存在 class="indent" 的div下的 table标签内tables = html.xpath("//div[@class='indent']//table")# print(len(tables))  # 打印之后如果是25的话就是对的books = []imgUrls = []# 遍历通过xpath得到的li标签列表# 因为要获取标题文本,所以xpath表达式要追加 /text(), t.xpath返回的是一个列表,且列表中只有一个元素所以追加一个[0]for t in tables:# title = t.xpath(".//div[@class='p12']/a/@title")  # 匹配得到的是空的# 书名title = t.xpath(".//td[@valign='top']//a/@title")[0]# 链接link = t.xpath(".//td[@valign='top']//a/@href")[0]# 获取pl标签的字符串pl = t.xpath(".//td[@valign='top']//p[1]/text()")[0]# 截取国家if '[' in pl:country = pl.split('[')[1].split(']')[0]else:country = '中'  # 没有国家的默认为“中国”# 截取作者if '[' in pl:author = pl.split(']')[1].split('/')[0].replace(" ", "")elif len(pl.split('/')) == 3:author = '无'elif '[' not in pl:author = pl.split('/')[-4].replace(" ", "")else:author = '无'# 截取翻译者if '[' in pl:translator = pl.split('/')[-4].replace(" ", "")elif len(pl.split('/')) == 3:translator = ' 'else:translator = ' '# 截取出版社publisher = pl.split('/')[-3]# 截取出版时间time = pl.split('/')[-2]# 截取单价if '元' in pl:price = pl.split('/')[-1].split('元')[0]else:price = pl.split('/')[-1]# 获取星级数str1 = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[1]/@class")[0].replace("allstar", "")# 此时获取到的数字其实是字符串类型,不能直接%10,需要把str转化为intnum = int(str1)star = num / 10# 获取评分score = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[2]/text()")[0]# 获取评价人数pnum = t.xpath(".//td[@valign='top']//div[@class='star clearfix']/span[3]/text()")[0]people = re.sub("\D", "", pnum)# 获取简介comments = t.xpath(".//p[@class='quote']/span/text()")comment = comments[0] if len(comments) != 0 else "无"book = {'书名': title,'链接': link,'国家': country,'作者': author,'翻译者': translator,'出版社': publisher,'出版时间': time,'价格': price,'星级': star,'评分': score,'评价人数': people,'简介': comment}# 图片imgUrl = t.xpath(".//a/img/@src")[0]# print(imgUrl)books.append(book)imgUrls.append(imgUrl)return books, imgUrls# 4. 下载图片保存文件
def downloadimg(url, book):# 判断文件夹是否在指定路径下面,建立文件夹并把指定路径移到文件夹下面if 'bookposter' in os.listdir(r'E:\Class\商业智能实训\我~编写代码\DoubanMovies'):passelse:os.mkdir(r'E:\Class\商业智能实训\我~编写代码\DoubanMovies\bookposter')os.chdir(r'E:\Class\商业智能实训\我~编写代码\DoubanMovies\bookposter')# 返回img的二进制流img = requests.request('GET', url).contentwith open(book['书名'] + '.jpg', 'wb') as f:# print('正在下载: %s' % url)f.write(img)# 5. 数据预处理
# def processData():if __name__ == '__main__':# url = 'https://book.douban.com/top250?start=0'# 10页循环遍历for i in range(10):# 2. 定义url并获取网页源代码url = 'https://book.douban.com/top250?start={}'.format(i * 25)# print(url)html = get_html(url)# 3. 解析网页源代码sleep(1)books = parse_html(html)[0]imgUrls = parse_html(html)[1]BOOKS.extend(books)IMGURLS.extend(imgUrls)# 4. 下载图片保存文件for i in range(250):# sleep(1)downloadimg(IMGURLS[i], BOOKS[i])os.chdir(r'E:\Class\商业智能实训\我~编写代码\DoubanMovies')# 以csv格式写入本地bookdata = pd.DataFrame(BOOKS)bookdata.to_csv('book.csv', index=False)print("图书信息写入本地成功")# 以txt格式写入本地错误# 得到的是字典格式,要想写成txt格式需要先转化成字符串格式# for i in range(25):#     with open('book.txt', 'a') as f:#         f.write(books[i] + '\n')

如果要借鉴的话,需要把文件夹路径进行修改。

其实在这里已经将部分数据进行了清洗和预处理,例如国家、作者、翻译者、价格、简介等信息。

3.3 爬取信息展示




这里就先将数据是如何爬取的以及爬取的结果做一下复习,接下来会继续更新数据清洗和预处理。
可以提前看一下异常数据信息部分截图,基本上对应着上面的csv文件截图,上面已经较为直观的将基本情况做了描述。

python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(一)相关推荐

  1. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(二)

    之前的博客已经写了python爬取豆瓣读书top250的相关信息,接下来继续看如何清洗数据. 如果有没看懂的或是不了解上一部分说的是什么内容的,请看https://blog.csdn.net/qq_4 ...

  2. python爬虫豆瓣读书top250+数据清洗+数据库+Java后端开发+Echarts数据可视化(四)

    之前的博客已经写了python爬取豆瓣读书top250的相关信息和清洗数据.将数据导入数据库并创建相应的数据表,以及进行项目准备工作,接下来开始正式编写后台代码. 如果有没看懂的或是不了解上一部分说的 ...

  3. Python爬虫豆瓣电影top250

      我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单   有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250.   打开链接,查看网页源代码,查找我们需要的信息的字 ...

  4. 爬虫豆瓣读书top250,保存为本地csv文件

    爬虫豆瓣读书top250,保存为本地csv文件 目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSou ...

  5. Python爬虫——豆瓣读书

    准备 豆瓣读书网址是:https://book.douban.com/tag/%E5%B0%8F%E8%AF%B4?start=880&type=T 红色箭头标记的就是我们要获取的信息,我们有 ...

  6. 爬虫豆瓣读书top250,保存为本地csv文件,可用excel查看(具体步骤和容易遇到的坑)

    1.目的 将豆瓣读书top250排名保存到本地excel,包括书名,作者,评分,评论数,简评,网址.用到了requests,res,BeautifulSoup,csv库. 2.分析网址 打开豆瓣读书网 ...

  7. python爬虫-豆瓣电影Top250

    豆瓣电影Top250 一.准备环境 idea+python插件/python 一.需求分析 1. 运用代码获取豆瓣电影Top250里面电影的相关信息: 影片详情链接: 影片名称: 影片图片链接: 影片 ...

  8. Python爬虫|豆瓣图书Top250

    欢迎大家关注我的微信公众号! 名称:爬虫与地理信息 一.爬取思路分析 1.URL链接地址分析 首先打开豆瓣图书Top250主页:https://book.douban.com/top250,鼠标滑到页 ...

  9. python 豆瓣电影top250_[python爬虫]豆瓣电影Top250简单数据分析绘图

    一:简介 通过抓取豆瓣电影Top250的数据,分别进行了三个数据统计,分别是:上榜的电影上映的年份,该年份总共上榜的电影数量,数量为0的就没有统计了:各个国家地区出品的电影数量:250部电影的各个类型 ...

最新文章

  1. win7映射网络驱动器消失了_网络资源共享;共享权限控制
  2. 【Python数据预处理】 归一化(按列减均值,除方差),标准化(按列缩放到指定范围),正则化(范数)
  3. 把一个结构体当做属性后碰到的问题
  4. mysql历史数据备份_Mysql存储过程历史表备份
  5. 互联网晚报 | 11月20日 星期六 | 阿里云单季营收首次超200亿;淘特年度活跃用户超2.4亿;首届中国网络文明大会在京召开...
  6. Gerrit代码Review高阶实战
  7. linux命令fs ls,Linux 命令:fsdisk
  8. 3Dmax哪个版本最好用?3dmax哪个版本稳定一点?
  9. 计算机组成原理中EMAR是什么,计算机组成原理(罗克露)第3章cpu.ppt
  10. 单例模式中饿汉模式和懒汉模式的线程安全问题
  11. msvcr71.dll 等相关DLL文件类型缺失下载
  12. 克服弱点,愈发完美-自我篇——《人性的弱点》读后感
  13. 一文教你用squid将闲置的服务器搭建成爬虫使用的高匿代理服务器
  14. 【matlab 图像处理】 guide 图像去雾系统
  15. 什么是目标检测?理论+实操(github全面解析)?(持续更新中)
  16. 图神经网络与图注意力网络相关知识概述
  17. Unix/Linux编程:getcontext、setcontext
  18. matlab使照片卡通化,怎么样用matlab设计动画直接画出奥运五环
  19. python输出1到9_1-9-Python格式化字符串(格式化输出)
  20. 正确选用屏幕保护视力

热门文章

  1. Linux配置squid正向代理(标准正向代理)
  2. 计算机网络与协议分析,计算机网络-使用网络协议分析器捕捉和分析协议数据包...
  3. 连接安装在阿里云服务器的Zookeeper
  4. C#入门-Person类
  5. 60 行代码爬取知乎神回复,笑的停不下来
  6. golang端口重用
  7. 什么是RMI,什么是RPC,两者之间的区别是什么?
  8. e-cology房地产行业解决方案
  9. leetcode 169(简单)题解:给定一个大小为 *n* 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 *⌊ n/2 ⌋* 的元素。
  10. mysql指引(十一):innodb基本结构和执行逻辑拆解