京东手机数据爬虫 + 数据可视化 + python

1,714 阅读3分钟

1、系统背景 随着网络的迅速发展,互联网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。 通过平时浏览信息,发现很多数据我们感兴趣,但是数量庞大,我们如果需要分析这些数据,需要我们利用程序去做一个采集,实现数据的价值。当我们购买华为手机时,比较他们的价格,图片,好评数量,好评率等,以便于我们对华为手机进行数据的可视化分析,所以要利用爬虫技术。 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

2、功能架构 在这里插入图片描述 Python爬虫程序主要使用python语言进行数据的爬取,其中利用urllib.request进行url的访问,利用lxml进行标签的选择,利用json进行数据的整理,利用pymysql进行数据的存储。通过if、len()等语句对数据空值的判断,利用数据库查询当前是否存在此商品编号判断爬取是否为重复值。 Python Django web数据可视化程序,主要利用python作为服务端,web(html和js)作为前端界面进行数据可视化,通过js和form表单的提交的方式请求python服务端,进行查询和新增。通过ajax的方式请求python服务端进行数据的删除和修改。 功能的具体流程图如下图所示: 在这里插入图片描述

3、环境配置 操作系统 Windows7 Python版本 3.8 Python库 urllib.request lxml json pymysql Django Os Sys

4、需求设计 爬取多页数据,数据清洗包括缺失值处理、重复值处理、异常值处理、数据离散化等处理,不存在缺失,异常值也要判断。数据存入数据库(不限)中。完成华为手机数据的增删改查和详情功能(管理员能够实现增删改查,普通用户只能查看数据),查询要求能做到模糊查询;完成用户的登录、注册、退出功能。 系统实体关系图: 在这里插入图片描述 数据定义: 在这里插入图片描述 在这里插入图片描述 5、代码 通过请求url获取标签中数据

1.	req = urllib.request.Request(url=url, headers=getHeaders())  
2.	data = urllib.request.urlopen(req).read().decode("utf-8", "ignore")  
3.	id_pat = '<strong class="J_(.*?)" '  
4.	return re.compile(id_pat).findall(data) 

在浏览器端F12中network中获得到商品价格的请求url。

1.	urlPrice = "https://p.3.cn/prices/get?skuId=" + goodsId

利用此url的get进行价格的获取,goodsId为商品编号 利用 etree的lxml进行html页面标签的筛选 goodsParams = goodsHtml.xpath('//ul[@class="parameter2 p-parameter-list"]/li') img = goodsHtml.xpath('//img[@id="spec-img"]') 其中goodsParams是华为手机的商品详情参数,img是华为手机的大图 在这里插入图片描述 在这里插入图片描述

实现对爬取数据的模糊查询,将查询数据放到context字典里给index.html前端,代码如下:

1.	sql = "SELECT * FROM goods WHERE goodsName like " + str("'%" + goodsName + "%'")  
2.	# 获取游标  
3.	cursor = conn.cursor()  
4.	cursor.execute(sql)  
5.	# 使用fetchall()获取全部数据  
6.	results = cursor.fetchall()  
7.	# 关闭游标  
8.	cursor.close()  
9.	# 关闭连接  
10.	conn.close()  
11.	context = {}  
12.	context['phones'] = list(results)  
13.	return render(request, 'index.html', context)  

然后利用web程序进行数据的展示,代码如下:

1.	<table border="1" cellspacing="0" cellpadding="0">  
2.	    <tr>  
3.	        <td>自增主键</td>  
4.	        <td>京东商品id</td>  
5.	        <td width="30px">商品名称</td>  
6.	        <td>图片</td>  
7.	        <td>商品毛重</td>  
8.	        <td>商品产地</td>  
9.	        <td>CPU</td>  
10.	        <td>商品原始价格</td>  
11.	        <td>商品京东价格</td>  
12.	        <td>商品京东PLUS会员价格</td>  
13.	        <td>评论总数</td>  
14.	        <td>好评总数</td>  
15.	        <td>中评总数</td>  
16.	        <td>差评总数</td>  
17.	        <td>视频评论总数</td>  
18.	        <td>贴图评论总数</td>  
19.	        <td>差评率</td>  
20.	        <td>好评率</td>  
21.	    </tr>  
22.	    {% for i in phones %}  
23.	        <tr>  
24.	            <td>{{ i.0 }}</td>  
25.	            <td><a href="/comment/?goodsId={{ i.1 }}">{{ i.1 }}</a></td>  
26.	            <td width="30px">{{ i.2 }}</td>  
27.	            <td><img style="width: 50px;height: 50px"src="{{ i.17 }}"></td>  
28.	            <td>{{ i.3 }}</td>  
29.	            <td>{{ i.4 }}</td>  
30.	            <td>{{ i.5 }}</td>  
31.	            <td>{{ i.6 }}</td>  
32.	            <td>{{ i.7 }}</td>  
33.	            <td>{{ i.8 }}</td>  
34.	            <td>{{ i.9 }}</td>  
35.	            <td>{{ i.10 }}</td>  
36.	            <td>{{ i.11 }}</td>  
37.	            <td>{{ i.12 }}</td>  
38.	            <td>{{ i.13 }}</td>  
39.	            <td>{{ i.14 }}</td>  
40.	            <td>{{ i.15 }}</td>  
41.	            <td>{{ i.16 }}</td>  
42.	  
43.	        </tr>  
44.	    {% endfor %}  
45.	</table>