大数据分析学习课程有哪些注意事项?

大数据时代,哪些课程最受欢迎?
在免费课程主页:,点击对应的课程类目右键审查元素就可以获取相应的链接,该网站课程类目链接采取这样的方式:,即在主页的基础上加入topicid=的形式。在这里需要注意,部分类目包含中文字符,如机器学习、数据挖掘、R语言等,在python网页解析中会出现“ASCII码无法识别的问题”,导致程序运行不出,这时需要加入urllib.parse.quote命令进行编码,使得中文字符识别出来,(英文字符在此命令下不受影响)。(3)构建全部链接获取函数,解决翻页问题
再次,构建全部链接抓取函数。由于部分课程类目不止一页,需要对翻页的链接进行抓取,这时候我们需要解决两个问题:一是每个类目有多少翻页?二是翻页链接的形式是什么样的,有无规律可循?在课程的底端可以看到每个类目的页数:对于多页的课程类目链接形式为(以Excel为例):
可以看到在课程类目的链接上加入了“&job=&grade=&page=&page=”这种形式。根据这两个问题的表现形式我们找到了解决方案,对于每个类目的页数问题,通过抓取“上一页”、“下一页”这个框中的列表长度来判断,如只有第一页保持原有链接不变,如有2个以上页面,则在原始链接的列表中加入page=2/3….的链接形式。最后封装成一个列表。def get_all_links(class_link):#每个课程类目有不止一页,因此链接也有多个,因此基于类目链接构建全部链接函数
htm = url_open(class_link)
page_num=htm.xpath('/html/body/div[2]/div[1]/div[2]/div[3]/div/a/text()')
urls = [class_link]
if len(page_num)&2:
for i in range(2,len(page_num)):
urls.append(class_link + '&job=&grade=&page=&page='+str(i))#将翻页链接依次加入类目链接中
return urls
(4)构建抓取信息函数接下来就开始抓取每个页面的信息,并采用pandas.DataFrame的数据框,采用Xpath方式抓取。def get_info(url):#抓取每个链接的信息,包括课程名称、时长、学习人数、类目
htm = url_open(url)
titles = htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/h3/a/text()')
times= htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/p[1]/text()')
numbers = htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/p[1]/span/text()')
topic = htm.xpath('/html/body/div[2]/div[1]/div[1]/dl[1]/dd[@class="cur"]/a/text()')
topics = topic * len(titles) #获取每个课程的类目变量,并且与每个课程一一对应,最好与其他变量在同一页面一起抓取
frame = pd.DataFrame([topics,titles,times,numbers], index=['topics','titles','times','numbers'])#转入数据列表DataFrame
frame = frame.T
return frame
(5)导入网页,爬取信息构造完相关函数后,将参数代入,爬取所有类目下所有课程的数据信息:if __name__ == '__main__':
time.sleep(2)
class_links = get_class_link(start_url)#获取类目链接
pool = threadspool(2)
urls = list(map(get_all_links,class_links))#多线程抓取每个类目的所有链接
url_links = []
for x in urls:
url_links.extend(x) #将所有链接装进一个list
frame_list = list(map(get_info,url_links))#数据框列表
a,b,c,d = [], [], [], []
[(a.extend(x['topics'])) for x in frame_list]
[(b.extend(x['titles'])) for x in frame_list]
[(c.extend(x['times'])) for x in frame_list]
[(d.extend(x['numbers'])) for x in frame_list]
c1 = [int(re.findall(r"\d+" ,txt)[0]) for txt in c]
d1 = [int(re.findall(r"\d+" ,txt)[0]) for txt in d] #采用正则表达式提取数字,并转化为整型,也算是数据清洗
frame = pd.DataFrame([a,b,c1,d1], index=['topics','titles','times','numbers'])#将数据整合
frame = frame.T
(6)数据截取、分组及可视化通过数据截取、分组计算、画图就可以得到每个类目平均的学习人数:ppv = frame.loc[:,['topics','numbers']]#获取部分数据,即数据切片
ppv1 = ppv.groupby('topics').sum()
print(ppv1)
ppv2 = ppv.groupby('topics').count()
ppv3 = ppv1/ppv2
print(ppv3)
ppv3.plot(kind='bar')#直方图,注意中文变量刚开始无法在图形中显示,需要设置python的输入法库
plt.show()
frame1 = frame.set_index('topics')
ax = frame1.loc['SAS', ['titles', 'numbers']]
bx = ax.plot(kind='barh')
bx.set_yticklabels(ax['titles'], rotation=0)
plt.show()
frame.plot(x='times', y='numbers', kind='scatter', color='g')
plt.show()
与上面类似,我们也可以抓取大数据职业方向方面课程的学习情况:job_urls = []
for job in [1,3,8]:
for page in range(1,14):
list_view = '/class/select?topicid=&job={}&grade=&page={}'.format(str(job),str(page))
page = urllib.request.urlopen(list_view)
txt = page.read().decode('utf-8')
if txt.find('暂无课程') == -1:#直接设置一定的页面链接,通过页面显示的信息有误来筛选链接
job_urls.append(list_view)
def get_info1(url):
page = urllib.request.urlopen(url)
txt = page.read().decode('utf-8')
htm = etree.HTML(txt)
titles = htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/h3/a/text()')
times = htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/p[1]/text()')
numbers = htm.xpath('/html/body/div[2]/div[1]/div[2]/div[2]/ul/li/p[1]/span/text()')
topic = htm.xpath('/html/body/div[2]/div[1]/div[1]/dl[2]/dd[@class="cur"]/a/text()')
topics = topic * len(titles)
frame = pd.DataFrame([topics, titles, times, numbers], index=['topics', 'titles', 'times', 'numbers'])
frame = frame.T
time.sleep(2)
return frame
在这里与前边不同的是,在抓取全部页面的时候,没有采用上面以页面底端的“上一页”、“下一页”信息来判断页面数量并构造链接,而是输入一个能涵盖每一类别最大页数的数字(如14,这里是翻遍类目最后页数确定下来的),再通过解析页面信息是否存在课程数据来筛选,采用了if txt.find('暂无课程') == -1:的条件循环。frame_list = list(map(get_info1,job_urls))
a,b,c,d = [], [], [], []
[(a.extend(x['topics'])) for x in frame_list]
[(b.extend(x['titles'])) for x in frame_list]
[(c.extend(x['times'])) for x in frame_list]
[(d.extend(x['numbers'])) for x in frame_list]
c1 = [int(re.findall(r"\d+" ,txt)[0]) for txt in c]
d1 = [int(re.findall(r"\d+" ,txt)[0]) for txt in d] #采用正则表达式提取数字,并转化为整型
frame = pd.DataFrame([a,b,c1,d1], index=['topics','titles','times','numbers'])
frame = frame.T
job_study = frame.loc[:, ['topics', 'numbers']]
job_study1 = job_study.groupby('topics').sum()
job_study2 = job_study.groupby('topics').count()
job_study3 = job_study1/job_study2
print(job_study2)
print(job_study3)
job_study = frame.loc[:, ['topics', 'numbers']]
job_study1 = job_study.groupby('topics').sum()
job_study2 = job_study.groupby('topics').count()
job_study3 = job_study1/job_study2
print(job_study2)
print(job_study3)
job_study3.plot(subplots=True,kind = 'pie',colors=['r', 'g', 'b'],autopct='%.2f',fontsize=10, figsize=(5,5))
plt.legend(loc ='lower left')
plt.show()
4收藏分享举报文章被以下专栏收录python网络爬虫与数据分析、可视化{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&基于python爬虫工具,对网络数据进行挖掘与分析、可视化等等,结合一些经济学原理来解释现象,寻找点有趣的内容解析解析&,&permission&:&COLUMN_PUBLIC&,&memberId&:2905002,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&python网络爬虫与数据分析、可视化&,&urlToken&:&zjying2000&,&id&:21626,&imagePath&:&v2-5fb289f2ea5fd1c0aec80f3680d8fce6.jpg&,&slug&:&zjying2000&,&applyReason&:&0&,&name&:&爬虫与数据分析&,&title&:&爬虫与数据分析&,&url&:&https:\u002F\\u002Fzjying2000&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:821,&avatar&:{&id&:&v2-5fb289f2ea5fd1c0aec80f3680d8fce6&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\\u002Fv2-5fb289f2ea5fd1c0aec80f3680d8fce6_l.jpg&,&articlesCount&:26},&state&:&accepted&,&targetPost&:{&titleImage&:&&,&lastUpdated&:,&imagePath&:&&,&permission&:&ARTICLE_PUBLIC&,&topics&:[89],&summary&:&大数据时代,数据的体量结构、获取方式、挖掘处理、分析呈现等等方面都发生了变化,由此衍生出大数据技术,包括数据的采集、存取、清洗、挖掘、可视化等等,产生了新的人才需 求,并且处于紧缺状态,来自麦肯锡全球研究所的另一项调查显示,预计到2018年,…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T19:04:23+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:1432149,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&大数据时代,哪些课程最受欢迎?&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:21626,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&&,&author&:{&bio&:&爱好大数据的经济学研究者&,&isFollowing&:false,&hash&:&37bcd79a42944a20fabbb&,&uid&:08,&isOrg&:false,&slug&:&zhou-yong-7-54&,&isFollowed&:false,&description&:&知乎专栏,关注精品,https:\u002F\\u002Fzjying2000&,&name&:&周永&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzhou-yong-7-54&,&avatar&:{&id&:&29fc5f352&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:2905002,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:454758}],&title&:&大数据时代,哪些课程最受欢迎?&,&author&:&zhou-yong-7-54&,&content&:&\u003Cp\u003E大数据时代,数据的体量结构、获取方式、挖掘处理、分析呈现等等方面都发生了变化,由此衍生出大数据技术,包括数据的采集、存取、清洗、挖掘、可视化等等,产生了新的人才需
求,并且处于紧缺状态,来自麦肯锡全球研究所的另一项调查显示,预计到2018年,美国将面临大约150万大数据专家的短缺,据国内大数据权威专家估算,5年内,大数据人才缺口也将高达130万左右。巨大的人才需求、仍处于上升阶段的职业前景也导致了大数据培训的火热,目前在在线课堂、论坛、线下机构纷纷开设大数据方向的培训课程,且应者如云。那么哪些课程或者哪些方向最受欢迎呢?本文以ppv课(国内领先的大数据学习社区)网站为例,该网站的免费课程频道有着较为齐全课程分类(见图1),并且积累了一定的用户学习数据。通过python软件(3.X版本)爬取所有课程的学习人数、时长、类别等网络数据(见图2),可以一窥当前大数据时代学习群体的培训需求。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E图1 ppv课免费课程\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-d4860edd92ffc_b.jpg\& data-rawwidth=\&802\& data-rawheight=\&173\& class=\&origin_image zh-lightbox-thumb\& width=\&802\& data-original=\&https:\u002F\\u002Fv2-d4860edd92ffc_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='802'%20height='173'&&\u002Fsvg&\& data-rawwidth=\&802\& data-rawheight=\&173\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&802\& data-original=\&https:\u002F\\u002Fv2-d4860edd92ffc_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-d4860edd92ffc_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E图2 每个课程的信息\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-8a86c7d6cc87d14c54ac343_b.jpg\& data-rawwidth=\&876\& data-rawheight=\&281\& class=\&origin_image zh-lightbox-thumb\& width=\&876\& data-original=\&https:\u002F\\u002Fv2-8a86c7d6cc87d14c54ac343_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='876'%20height='281'&&\u002Fsvg&\& data-rawwidth=\&876\& data-rawheight=\&281\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&876\& data-original=\&https:\u002F\\u002Fv2-8a86c7d6cc87d14c54ac343_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-8a86c7d6cc87d14c54ac343_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E
采用p ython的xpath查询和处理 HTML \u002F XML 文档,针对网页链接与翻页特点,构建函数以及数据清洗等,最终获取如下数据:\u003C\u002Fp\u003E\u003Cp\u003E图3 最终获取的数据形式\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-1f38c6bcdaf_b.jpg\& data-rawwidth=\&543\& data-rawheight=\&463\& class=\&origin_image zh-lightbox-thumb\& width=\&543\& data-original=\&https:\u002F\\u002Fv2-1f38c6bcdaf_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='543'%20height='463'&&\u002Fsvg&\& data-rawwidth=\&543\& data-rawheight=\&463\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&543\& data-original=\&https:\u002F\\u002Fv2-1f38c6bcdaf_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-1f38c6bcdaf_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E再通过数据截取、封装、可视化处理,得到了每一课程类目下的平均学习人数(类目下所有课程学习人数相加\u002F该类目课程数量),见下图:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E图4 每一课程类目的平均学习人数\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-27a9f009ba0e63eecda9_b.jpg\& data-rawwidth=\&523\& data-rawheight=\&435\& class=\&origin_image zh-lightbox-thumb\& width=\&523\& data-original=\&https:\u002F\\u002Fv2-27a9f009ba0e63eecda9_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='523'%20height='435'&&\u002Fsvg&\& data-rawwidth=\&523\& data-rawheight=\&435\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&523\& data-original=\&https:\u002F\\u002Fv2-27a9f009ba0e63eecda9_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-27a9f009ba0e63eecda9_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E
如图,概率与统计课程的平均学习人数最多,达到3000以上,这说明学习者对大数据的基础统计理论的学习需求较大;其次是R语言、Mysql、SPSS等,说明了大数据常用的软件与数据库的学习需求也较高。\u003C\u002Fp\u003E\u003Cp\u003E
分类比较,比如在大数据统计软件方面的平均学习人数上,由上图可以看出,R语言&SPSS&Python&SAS&Excel&Matlab,后三者在大数据统计技术上已稍显落后(spss在开发出数据挖掘模块),且R、Python是目前大数据分析下最火的两大统计软件,相应的学习需求也高;数据库方面:Mysql&Nosql&Sql&Oracle,Mysql平均学习人数最多且远远超过其他数据库,作为大数据目前最常用的数据库存储工具,因此会获得如此高的关注度;理论方面:概率统计&机器学习&数据挖掘,说明学习者对基础理论的需求还是比较高,由于大数据技术是计算机与数据统计等内容的结合,很多计算机从业者缺乏统计理论知识以及初学者也要从最基础的理论学起,这导致概率与统计的学习需求遥遥领先,从侧面也说明了在大数据领域统计理论的缺失或不足较为明显。对于大数据里较火的软件平台——Hadoop,平均学习人数处于不高不低的状态,这是由于大多数大数据学习者还处于初级水平,对Hadoop这一高级应用技术还缺乏了解,所以学习需求没那么高。\u003C\u002Fp\u003E\u003Cp\u003E
我们还可以获取到每一课程类目下的所有课程的学习人数,如SAS类目所有的课程学习人数:\u003C\u002Fp\u003E\u003Cp\u003E图5 SAS类目所有的课程学习人数\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-ee126cb2f3_b.jpg\& data-rawwidth=\&714\& data-rawheight=\&344\& class=\&origin_image zh-lightbox-thumb\& width=\&714\& data-original=\&https:\u002F\\u002Fv2-ee126cb2f3_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='714'%20height='344'&&\u002Fsvg&\& data-rawwidth=\&714\& data-rawheight=\&344\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&714\& data-original=\&https:\u002F\\u002Fv2-ee126cb2f3_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-ee126cb2f3_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E
从上图可以看出,关于初级、入门类的课程需求还是最高。\u003C\u002Fp\u003E\u003Cp\u003E
那么,课程学习人数与课程时长有无关联?构造所有课程学习人数与学习时长的散点图:\u003C\u002Fp\u003E\u003Cp\u003E图6 课程学习人数与学习时长的散点图\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-e914f0314b4ebf_b.jpg\& data-rawwidth=\&567\& data-rawheight=\&373\& class=\&origin_image zh-lightbox-thumb\& width=\&567\& data-original=\&https:\u002F\\u002Fv2-e914f0314b4ebf_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='567'%20height='373'&&\u002Fsvg&\& data-rawwidth=\&567\& data-rawheight=\&373\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&567\& data-original=\&https:\u002F\\u002Fv2-e914f0314b4ebf_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-e914f0314b4ebf_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E
可以看到二者并无明显的相关关系。\u003C\u002Fp\u003E\u003Cp\u003E
我们还可以将所有课程按照职业方向、难以程度来分类,获取相关信息,如不同职业方向平均课程学习人数的占比情况:\u003C\u002Fp\u003E\u003Cp\u003E图7 不同职业方向平均课程学习人数的占比情况\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-c5cedab814005aff5232be_b.jpg\& data-rawwidth=\&445\& data-rawheight=\&368\& class=\&origin_image zh-lightbox-thumb\& width=\&445\& data-original=\&https:\u002F\\u002Fv2-c5cedab814005aff5232be_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='445'%20height='368'&&\u002Fsvg&\& data-rawwidth=\&445\& data-rawheight=\&368\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&445\& data-original=\&https:\u002F\\u002Fv2-c5cedab814005aff5232be_r.jpg\& data-actualsrc=\&https:\u002F\\u002Fv2-c5cedab814005aff5232be_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E
数据分析师、大数据工程师、数据挖掘工程师三大方向的学习需求并无明显差异,其中数据分析师略占优势,说明对于数据分析的学习需求较高。\u003C\u002Fp\u003E\u003Cp\u003E
综合看来,大数据时代学习者对于初级、入门课程的关注度还是比较高,对于常用的软件R、Python以及统计、数据分析的学习需求相对集中。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E附:对网页抓取的流程与代码:\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E(1\u003C\u002Fb\u003E\u003Cb\u003E)导入相关库并构建网页解析函数\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E装入网页解析、多线程、数值计算、数据可视化等python安装库,并构造网页解析函数,在函数中设置模仿浏览器登录的head方式:\u003C\u002Fp\u003E\u003Cp\u003E\u003Ci\u003E\u003Cb\u003Eimport \u003C\u002Fb\u003Eurllib.request\u003Cbr\u003E\u003Cb\u003Efrom \u003C\u002Fb\u003Elxml \u003Cb\u003Eimport\n\u003C\u002Fb\u003Eetree\u003Cbr\u003E\u003Cb\u003Eimport \u003C\u002Fb\u003Epandas \u003Cb\u003Eas \u003C\u002Fb\u003Epd\u003Cbr\u003E\u003Cb\u003Efrom \u003C\u002Fb\u003Emultiprocessing.dummy \u003Cb\u003Eimport \u003C\u002Fb\u003EPool\n\u003Cb\u003Eas \u003C\u002Fb\u003Ethreadspool\u003Cbr\u003E\u003Cb\u003Eimport \u003C\u002Fb\u003Eurllib,re,time\u003Cbr\u003E\u003Cb\u003Eimport \u003C\u002Fb\u003Enumpy \u003Cb\u003Eas \u003C\u002Fb\u003Enp\u003Cbr\u003E\u003Cb\u003Eimport \u003C\u002Fb\u003Ematplotlib.pyplot \u003Cb\u003Eas \u003C\u002Fb\u003Eplt\u003Cbr\u003E\u003Cbr\u003E\nstart_url='\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\\u002Fclass\u002Fselect\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E选课中心 - PPV课大数据培训专家\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E'\u003Cbr\u003Eurl_host = '\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\\u002Fclass\u002Fselect%3Ftopicid%3D\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E选课中心 - PPV课大数据培训专家\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E'\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003Edef \u003C\u002Fb\u003E\u003Cb\u003Eurl_open\u003C\u002Fb\u003E(url):#构建网页解析函数\u003Cbr\u003E\n
req = urllib.request.Request(url)\u003Cbr\u003E\n
req.add_header('User-Agent','Mozilla\u002F5.0\n(Windows NT 6.1) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F49.0.2623.22\nSafari\u002F537.36 SE 2.X MetaSr 1.0')\u003Cbr\u003E\n
page = urllib.request.urlopen(req)#模仿浏览器登录\u003Cbr\u003E\n
txt = page.read().decode('utf-8')\u003Cbr\u003E\n
htm = etree.HTML(txt)\u003Cbr\u003E\u003Cb\u003Ereturn \u003C\u002Fb\u003E\u003C\u002Fi\u003E\u003Ci\u003Ehtm\u003C\u002Fi\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E(2\u003C\u002Fb\u003E\u003Cb\u003E)构建每一类目链接获取函数\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E获取每个类目的链接,也就是图1中机器学习、数据挖掘等14个类目的链接,构建每个类目链接获取的函数:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edef get_class_link(url):#获取每个类目的链接\n
htm = url_open(url)\n
class_topics = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[1]\u002Fdl[1]\u002Fdd\u002Fa\u002Ftext()')[1:-1]#对课程类目的网址进行解析,并且去除一头一尾“全部”与“会员课程”\n
class_link =[]\n
for class_topic in class_topics:\n
class_link.append(url_host + urllib.parse.quote(class_topic))#主要解决部分网址包含中文字符无法解码的问题\n
return class_link\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E
在免费课程主页:\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\\u002Fclass\u002Fselect\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E选课中心 - PPV课大数据培训专家\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E,点击对应的课程类目右键审查元素就可以获取相应的链接,该网站课程类目链接采取这样的方式:\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\\u002Fclass\u002Fselect%3Ftopicid\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Ehttp:\u002F\\u002Fclass\u002Fselect?topicid=机器学习\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E,即在主页的基础上加入topicid=的形式。在这里需要注意,部分类目包含中文字符,如机器学习、数据挖掘、R语言等,在python网页解析中会出现“ASCII码无法识别的问题”,导致程序运行不出,这时需要加入urllib.parse.quote命令进行编码,使得中文字符识别出来,(英文字符在此命令下不受影响)。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E(3\u003C\u002Fb\u003E\u003Cb\u003E)构建全部链接获取函数,解决翻页问题\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E
再次,构建全部链接抓取函数。由于部分课程类目不止一页,需要对翻页的链接进行抓取,这时候我们需要解决两个问题:一是每个类目有多少翻页?二是翻页链接的形式是什么样的,有无规律可循?在课程的底端可以看到每个类目的页数:\u003C\u002Fp\u003E\u003Cp\u003E对于多页的课程类目链接形式为(以Excel为例):\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&https:\u002F\\u002F?target=http%3A\u002F\\u002Fclass\u002Fselect%3Ftopicid%3DExcel%26job%3D%26grade%3D%26page%3D%26page%3D2\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E选课中心 - PPV课大数据培训专家\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E
可以看到在课程类目的链接上加入了“&job=&grade=&page=&page=”这种形式。根据这两个问题的表现形式我们找到了解决方案,对于每个类目的页数问题,通过抓取“上一页”、“下一页”这个框中的列表长度来判断,如只有第一页保持原有链接不变,如有2个以上页面,则在原始链接的列表中加入page=2\u002F3….的链接形式。最后封装成一个列表。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edef get_all_links(class_link):#每个课程类目有不止一页,因此链接也有多个,因此基于类目链接构建全部链接函数\n
htm = url_open(class_link)\n
page_num=htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[3]\u002Fdiv\u002Fa\u002Ftext()')\n
urls = [class_link]\n
if len(page_num)&2:\n
for i in range(2,len(page_num)):\n
urls.append(class_link + '&job=&grade=&page=&page='+str(i))#将翻页链接依次加入类目链接中\n
return urls\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cb\u003E(4\u003C\u002Fb\u003E\u003Cb\u003E)构建抓取信息函数\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E接下来就开始抓取每个页面的信息,并采用pandas.DataFrame的数据框,采用Xpath方式抓取。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Edef get_info(url):#抓取每个链接的信息,包括课程名称、时长、学习人数、类目\n
htm = url_open(url)\n
titles = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fh3\u002Fa\u002Ftext()')\n
times= htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fp[1]\u002Ftext()')\n
numbers = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fp[1]\u002Fspan\u002Ftext()')\n
topic = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[1]\u002Fdl[1]\u002Fdd[@class=\&cur\&]\u002Fa\u002Ftext()')\n
topics = topic * len(titles) #获取每个课程的类目变量,并且与每个课程一一对应,最好与其他变量在同一页面一起抓取\n
frame = pd.DataFrame([topics,titles,times,numbers], index=['topics','titles','times','numbers'])#转入数据列表DataFrame\n
frame = frame.T\n
return frame\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cb\u003E(5\u003C\u002Fb\u003E\u003Cb\u003E)导入网页,爬取信息\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E构造完相关函数后,将参数代入,爬取所有类目下所有课程的数据信息:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eif __name__ == '__main__':\n
time.sleep(2)\n
class_links = get_class_link(start_url)#获取类目链接\n
pool = threadspool(2)\n
urls = list(map(get_all_links,class_links))#多线程抓取每个类目的所有链接\n
url_links = []\n
for x in urls:\n
url_links.extend(x) #将所有链接装进一个list\n
frame_list = list(map(get_info,url_links))#数据框列表\n
a,b,c,d = [], [], [], []\n
[(a.extend(x['topics'])) for x in frame_list]\n
[(b.extend(x['titles'])) for x in frame_list]\n
[(c.extend(x['times'])) for x in frame_list]\n
[(d.extend(x['numbers'])) for x in frame_list]\n
c1 = [int(re.findall(r\&\\d+\& ,txt)[0]) for txt in c]\n
d1 = [int(re.findall(r\&\\d+\& ,txt)[0]) for txt in d] #采用正则表达式提取数字,并转化为整型,也算是数据清洗\n
frame = pd.DataFrame([a,b,c1,d1], index=['topics','titles','times','numbers'])#将数据整合\n
frame = frame.T\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cb\u003E(6\u003C\u002Fb\u003E\u003Cb\u003E)数据截取、分组及可视化\u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cp\u003E通过数据截取、分组计算、画图就可以得到每个类目平均的学习人数:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eppv = frame.loc[:,['topics','numbers']]#获取部分数据,即数据切片\nppv1 = ppv.groupby('topics').sum()\nprint(ppv1)\nppv2 = ppv.groupby('topics').count()\nppv3 = ppv1\u002Fppv2\nprint(ppv3)\nppv3.plot(kind='bar')#直方图,注意中文变量刚开始无法在图形中显示,需要设置python的输入法库\nplt.show()\nframe1 = frame.set_index('topics')\nax = frame1.loc['SAS', ['titles', 'numbers']]\nbx = ax.plot(kind='barh')\nbx.set_yticklabels(ax['titles'], rotation=0)\nplt.show()\nframe.plot(x='times', y='numbers', kind='scatter', color='g')\nplt.show()\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E 与上面类似,我们也可以抓取大数据职业方向方面课程的学习情况:\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Ejob_urls = []\nfor job in [1,3,8]:\n
for page in range(1,14):\n
list_view = 'http:\u002F\\u002Fclass\u002Fselect?topicid=&job={}&grade=&page={}'.format(str(job),str(page))\n
page = urllib.request.urlopen(list_view)\n
txt = page.read().decode('utf-8')\n
if txt.find('暂无课程') == -1:#直接设置一定的页面链接,通过页面显示的信息有误来筛选链接\n
job_urls.append(list_view)\n
pass\n\ndef get_info1(url):\n
page = urllib.request.urlopen(url)\n
txt = page.read().decode('utf-8')\n
htm = etree.HTML(txt)\n
titles = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fh3\u002Fa\u002Ftext()')\n
times = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fp[1]\u002Ftext()')\n
numbers = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[2]\u002Fdiv[2]\u002Ful\u002Fli\u002Fp[1]\u002Fspan\u002Ftext()')\n
topic = htm.xpath('\u002Fhtml\u002Fbody\u002Fdiv[2]\u002Fdiv[1]\u002Fdiv[1]\u002Fdl[2]\u002Fdd[@class=\&cur\&]\u002Fa\u002Ftext()')\n
topics = topic * len(titles)\n
frame = pd.DataFrame([topics, titles, times, numbers], index=['topics', 'titles', 'times', 'numbers'])\n
frame = frame.T\n
time.sleep(2)\n
return frame\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E在这里与前边不同的是,在抓取全部页面的时候,没有采用上面以页面底端的“上一页”、“下一页”信息来判断页面数量并构造链接,而是输入一个能涵盖每一类别最大页数的数字(如14,这里是翻遍类目最后页数确定下来的),再通过解析页面信息是否存在课程数据来筛选,采用了if txt.find('暂无课程') == -1:的条件循环。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Eframe_list = list(map(get_info1,job_urls))\na,b,c,d = [], [], [], []\n[(a.extend(x['topics'])) for x in frame_list]\n[(b.extend(x['titles'])) for x in frame_list]\n[(c.extend(x['times'])) for x in frame_list]\n[(d.extend(x['numbers'])) for x in frame_list]\nc1 = [int(re.findall(r\&\\d+\& ,txt)[0]) for txt in c]\nd1 = [int(re.findall(r\&\\d+\& ,txt)[0]) for txt in d] #采用正则表达式提取数字,并转化为整型\nframe = pd.DataFrame([a,b,c1,d1], index=['topics','titles','times','numbers'])\nframe = frame.T\njob_study = frame.loc[:, ['topics', 'numbers']]\njob_study1 = job_study.groupby('topics').sum()\njob_study2 = job_study.groupby('topics').count()\njob_study3 = job_study1\u002Fjob_study2\nprint(job_study2)\nprint(job_study3)\njob_study = frame.loc[:, ['topics', 'numbers']]\njob_study1 = job_study.groupby('topics').sum()\njob_study2 = job_study.groupby('topics').count()\njob_study3 = job_study1\u002Fjob_study2\nprint(job_study2)\nprint(job_study3)\njob_study3.plot(subplots=True,kind = 'pie',colors=['r', 'g', 'b'],autopct='%.2f',fontsize=10, figsize=(5,5))\nplt.legend(loc ='lower left')\nplt.show()\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E&,&updated&:new Date(&T11:04:23.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&collapsedCount&:0,&likeCount&:4,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&大数据&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Python&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&爬虫 (计算机网络)&}],&adminClosedComment&:false,&titleImageSize&:{&width&:0,&height&:0},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&zjying2000&,&name&:&爬虫与数据分析&},&tipjarState&:&inactivated&,&annotationAction&:[],&sourceUrl&:&&,&pageCommentsCount&:0,&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T19:04:23+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:null,&isFollowing&:false,&hash&:&acf7df3c9c54e1ffe5780&,&uid&:355300,&isOrg&:false,&slug&:&xiao-chen-41-76&,&isFollowed&:false,&description&:&&,&name&:&小沉&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fxiao-chen-41-76&,&avatar&:{&id&:&af0442faaea8d&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&数据,汽车,dota,足球,游泳&,&isFollowing&:false,&hash&:&bbfebee2ff6ec8&,&uid&:166900,&isOrg&:false,&slug&:&chi-suan-nai-zhi-tian-gai&,&isFollowed&:false,&description&:&&,&name&:&吃酸奶只舔盖&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fchi-suan-nai-zhi-tian-gai&,&avatar&:{&id&:&v2-b0a2aa6cca81b6b601cb96&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&cf4a8ddbbf2b1a&,&uid&:262800,&isOrg&:false,&slug&:&miao-le-ge-wu-33&,&isFollowed&:false,&description&:&&,&name&:&喵了个呜&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fmiao-le-ge-wu-33&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&3e3b43ccf5a5f&,&uid&:833500,&isOrg&:false,&slug&:&zhou-lu-huo&,&isFollowed&:false,&description&:&&,&name&:&周铝硅&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzhou-lu-huo&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cimg src=\&https:\u002F\\u002Fv2-d4860edd92ffc_200x112.jpg\& data-rawwidth=\&802\& data-rawheight=\&173\& class=\&origin_image inline-img zh-lightbox-thumb\& data-original=\&https:\u002F\\u002Fv2-d4860edd92ffc_r.jpg\&\u003E大数据时代,数据的体量结构、获取方式、挖掘处理、分析呈现等等方面都发生了变化,由此衍生出大数据技术,包括数据的采集、存取、清洗、挖掘、可视化等等,产生了新的人才需 求,并且处于紧缺状态,来自麦肯锡全球研究所的另一项调查显示,预计到2018年,…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&爬虫 (计算机网络)&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&Python&},{&url&:&https:\u002F\\u002Ftopic\u002F&,&id&:&&,&name&:&「双十一」购物狂欢节&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&爱好大数据的经济学研究者&,&isFollowing&:false,&hash&:&37bcd79a42944a20fabbb&,&uid&:08,&isOrg&:false,&slug&:&zhou-yong-7-54&,&isFollowed&:false,&description&:&知乎专栏,关注精品,https:\u002F\\u002Fzjying2000&,&name&:&周永&,&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzhou-yong-7-54&,&avatar&:{&id&:&29fc5f352&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&zjying2000&,&name&:&爬虫与数据分析&},&content&:&\u003Cp\u003E
又是一年“双11”,随着时间的临近,憋在心中的洪荒之力不断发酵,买!买!买!以“天猫”为代表的各大电商平台也纷纷出击,大打宣传战勾起“剁手党”们的欲望。百度指数显示,在11月11日愈来愈近的情况下,从10月初开始,“双11”这一概念就不断掀起网络热潮,热度逐步攀升。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-7fa3f5ae439e395a8df8829_b.jpg\& data-rawwidth=\&1228\& data-rawheight=\&272\& class=\&origin_image zh-lightbox-thumb\& width=\&1228\& data-original=\&https:\u002F\\u002Fv2-7fa3f5ae439e395a8df8829_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E
这其中,代表“双十一”购物狂欢的先行战斗——双十一预售,早已在网络打响,以预售的先驱者天猫为代表的各大电商平台,以及一些线上线下企业纷纷加入这一战役,从10月开始,酝酿着“剁手”气息的双十一预售战就在电商江湖上掀起一片风雨。\u003C\u002Fp\u003E\u003Cp\u003E2016年的双11仍以天猫为主,苏宁、国美也加入进来,京东则是部分商品进行预售。由于各电商平台的网页结构不同且数量繁多,很难统一抓取。本文以“值不值得买网站”提供的各电商平台双11预售商品信息(在该网站搜索栏输入“双11预售”就会列出不同电商平台提供的商品信息,\u003Ca href=\&http:\u002F\\u002F?target=http%3A\u002F\\u002F%3Fc%3Dhome%26s%3D%25E5%258F%258C11%25E9%25A2%%2594%25AE%26p%3D1\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E什么值得买 | 品质消费第一站\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E双11预售&p=1),在统一的网页格式下用python3.5软件抓取商品信息,并且包含对预售商品值、不值的评价数据等等,进行数据分析。\u003C\u002Fp\u003E\u003Cp\u003E由于该网站双11预售搜索下还包括2015年、2014年的信息,因此对相应商品发布的时间也抓取,后期通过数据清理将往年信息去除(数据截止到日),该网站还包括商品分类信息,也一并抓取并在后面进行分析。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-6ed52070a89eacefc6d10_b.jpg\& data-rawwidth=\&852\& data-rawheight=\&538\& class=\&origin_image zh-lightbox-thumb\& width=\&852\& data-original=\&https:\u002F\\u002Fv2-6ed52070a89eacefc6d10_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E(1)双十一预售商品数目:天猫全方位铺开\u003C\u002Fp\u003E\u003Cp\u003E根据抓取数据分析,阿里巴巴旗下一系列电商网站双十一预售提供的商品占主力,包括天猫精选有1930件,远远超过其他电商网站,接着是天猫国际(280件)、聚划算(248件)、飞猪(50件)、阿里旅游(43件,10月27日升级为飞猪,二者属于一个平台),其它非阿里系电商网站中,苏宁易购44件、京东32件、国美在线13件、美的商城10件、亚马逊中国8件,剩下的就在10件以内(见下图,由于数据太大,天猫精选商品数未在下图中显示)。从中可以看出,天猫在双十一预售中的主力位置,并辅以聚划算、跨境电商、旅游电商等旗下其他网站多形态全面展开,非阿里系之外,苏宁也是主打预售的商家之一,但难以在商品数量上与天猫抗衡,京东由于并未将重点放在预售战略上,也落后于天猫。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-fa312def90fc0504cc66fbf6_b.jpg\& data-rawwidth=\&765\& data-rawheight=\&550\& class=\&origin_image zh-lightbox-thumb\& width=\&765\& data-original=\&https:\u002F\\u002Fv2-fa312def90fc0504cc66fbf6_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E(2)双十一预售不同商品类目的数量分析\u003C\u002Fp\u003E\u003Cp\u003E奇怪的是,该网站发布的双十一预售商品数量,按照不同商品类目统计,运动户外超过传统热门服饰鞋包,数量最多(499件,其中天猫精选就有419件),剩下的依次是个护化妆、食品保健、日用百货、家居家装等等,最少的是图书音像、礼品钟表等,侧面反映了大家对双十一预售商品的关注程度。其中,天猫精选的商品数量在大部分商品类目中占主要地位,除了个护化妆、家用电器、金融旅游外,但是在这些类目里又有聚划算、天猫国际,特别是阿里旅游与飞猪的旅游产品,所以还是以天猫商品为主。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-bf51c36f676c26cbbdebe_b.jpg\& data-rawwidth=\&848\& data-rawheight=\&568\& class=\&origin_image zh-lightbox-thumb\& width=\&848\& data-original=\&https:\u002F\\u002Fv2-bf51c36f676c26cbbdebe_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E(3)双十一预售商品发布趋势:10月下旬开始掀起高潮\u003C\u002Fp\u003E\u003Cp\u003E根据网站发布商品的时间,得到了双十一预售商品发布时间趋势图(如下),可以看到双十一预售从进入10月份开始酝酿,在10月下旬突然掀起高潮,在11月之前,每日都有上百件的商品发布,但在进入11月之后,数量开始滑落,由于11月11日即将到来,商品预售战也进入尾声,11月3日开始下滑,11月5日降到日发布数量50件以下。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-ed53214ef2fecd5f73f5eee_b.jpg\& data-rawwidth=\&770\& data-rawheight=\&406\& class=\&origin_image zh-lightbox-thumb\& width=\&770\& data-original=\&https:\u002F\\u002Fv2-ed53214ef2fecd5f73f5eee_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E(4)双十一预售的促销手段:主打“包邮+定金+尾款”\u003C\u002Fp\u003E\u003Cp\u003E对发布商品下面的包邮、付定金等营销方式的文字信息进行抓取,并制作成词云,可以发现尾款、定金、包邮出现次数最多,这是预售的主要方式,其次是定金翻倍、膨胀(X元抵X元)、需用劵、优惠劵叠加等等手段。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-367acac8c7c1_b.jpg\& data-rawwidth=\&398\& data-rawheight=\&360\& class=\&content_image\& width=\&398\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E(5)双十一预售的商品评价:天猫类、图书音像等商品值得预定\u003C\u002Fp\u003E\u003Cp\u003E对该网站商品下浏览者对商品的评价数据(值、不值得买)进行抓取,后期通过数据清洗将值得买+不值得买总点击数低于10的商品数据去掉,结合商品类目、电商网站的分类数据分析。从不同电商平台角度分析,由于易车网、要买车网等大多数网站总体商品数量较少,甚至低于5以内,虽然部分网站值得买、不值得买的平均评价数较高,但样本数太少,因此不能作为分析对象。在商品数量较多的几家网站中,天猫精选、天猫国际、聚划算虽然商品数量巨大,但值得买的平均评价并非领先,反倒是京东、苏宁易购的值得买平均评价数最多,其次是阿里旅游、飞猪,另外京东、苏宁易购不值得买的平均评价数也较高,这说明了两家电商预售商品值不值得买有较大争议,而天猫精选、天猫国际、聚划算、阿里旅游、飞猪等阿里系以及国美在线、亚马逊中国等的值得买平均评价的占比高于不值得买,说明消费者对这几家网站商品预售方式评价较好。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-e516a7a22d495f0e69deeb97dc211785_b.jpg\& data-rawwidth=\&848\& data-rawheight=\&514\& class=\&origin_image zh-lightbox-thumb\& width=\&848\& data-original=\&https:\u002F\\u002Fv2-e516a7a22d495f0e69deeb97dc211785_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E从不同商品类目来看,将同一商品值得买除以(值得买+不值得买),得到值得买的好评率,在对各商品类目平均,图书音像、金融旅游、玩模乐器、家用电器等商品好评率稍高一些,食品保健、礼品钟表则相对较低,前者由于质量要求较高,后者则是特殊用途要求较高,因此好评率略低于其他商品。\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&https:\u002F\\u002Fv2-0cbfcc7fb117d67080e34_b.jpg\& data-rawwidth=\&789\& data-rawheight=\&413\& class=\&origin_image zh-lightbox-thumb\& width=\&789\& data-original=\&https:\u002F\\u002Fv2-0cbfcc7fb117d67080e34_r.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cp\u003E综合看来,天猫在此次预售战中占据主力地位,以其较高的商品数量,辅以阿里系多元化网站形态遥遥领先,非阿里系中苏宁易购、京东占主要;预售商品类目中,运动户外、服饰鞋包最多,图书音像、礼品钟表等最少;双十一预售战从10月初逐步酝酿,在10月下旬掀起高潮,进入11月,随着双11逐渐来临则慢慢回落;双十一预售的促销手段以“包邮+预付定金+尾款”为主,辅以定金翻倍、膨胀、优惠券等手段;在预售商品评价中,天猫为主的阿里系值得买的平均好评率较好,京东、苏宁易购虽然平均好评数较高,但值不值得买存在争议,商品类目中,图书音像、金融旅游好评率较高,食品保健、礼品钟表则相对较低。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E本文代码见github:\u003Ca href=\&http:\u002F\\u002F?target=https%3A\\u002Fzhangjuying2Fshuang11yushou-python\u002Fblob\u002Fmaster\u002Fyushou\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Ezhangjuying2Fshuang11yushou-python\u003Ci class=\&icon-external\&\u003E\u003C\u002Fi\u003E\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&state&:&published&,&sourceUrl&:&&,&pageCommentsCount&:0,&canComment&:false,&snapshotUrl&:&&,&slug&:,&publishedTime&:&T20:59:29+08:00&,&url&:&\u002Fp\u002F&,&title&:&双十一预售战下的电商风云&,&summary&:&又是一年“双11”,随着时间的临近,憋在心中的洪荒之力不断发酵,买!买!买!以“天猫”为代表的各大电商平台也纷纷出击,大打宣传战勾起“剁手党”们的欲望。百度指数显示,在11月11日愈来愈近的情况下,从10月初开始,“双11”这一概念就不断掀起网络热…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&commentPermission&:&anyone&,&commentsCount&:0,&likesCount&:3}},&annotationDetail&:null,&commentsCount&:0,&likesCount&:4,&FULLINFO&:true}},&User&:{&zhou-yong-7-54&:{&isFollowed&:false,&name&:&周永&,&headline&:&知乎专栏,关注精品,https:\u002F\\u002Fzjying2000&,&avatarUrl&:&https:\u002F\\u002F29fc5f352_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&zhou-yong-7-54&,&bio&:&爱好大数据的经济学研究者&,&hash&:&37bcd79a42944a20fabbb&,&uid&:08,&isOrg&:false,&description&:&知乎专栏,关注精品,https:\u002F\\u002Fzjying2000&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\\u002Fpeople\u002Fzhou-yong-7-54&,&avatar&:{&id&:&29fc5f352&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&nwebStickySidebar&:&sticky&,&searchSectionStyle&:&loosen&,&androidPassThroughPush&:&all&,&newMore&:&new&,&nwebQAGrowth&:&experiment&,&showTipInLiveDetailsPage&:&true&,&nwebFeedAd&:&experiment&,&newSign&:&newVersion&,&liveReviewBuyBar&:&live_review_buy_bar_2&,&qawebRelatedReadingsContentControl&:&open&,&marketTabBanner&:&market_tab_banner_show&,&liveStore&:&ls_a2_b2_c1_f2&,&qawebThumbnailAbtest&:&new&,&nwebSearch&:&nweb_search_heifetz&,&searchHybridTabs&:&without-tabs&,&enableVoteDownReasonMenu&:&enable&,&showVideoUploadAttention&:&true&,&isOffice&:&false&,&enableTtsPlay&:&false&,&newQuestionDiversion&:&false&,&wechatShareModal&:&wechat_share_modal_show&,&newLiveFeedMediacard&:&old&,&hybridZhmoreVideo&:&no&,&recommendationAbtest&:&new&,&qrcodeLogin&:&qrcode&,&isShowUnicomFreeEntry&:&unicom_free_entry_off&,&newMobileColumnAppheader&:&new_header&,&questionRecommendReadingsAbtest&:&similar&,&androidDbCommentWithRepinRecord&:&open&,&androidDbRecommendAction&:&open&,&zcmLighting&:&zcm&,&androidDbFeedHashTagStyle&:&button&,&appStoreRateDialog&:&close&,&newAppViewRelatedAd&:&no&,&default&:&None&,&isNewNotiPanel&:&no&,&androidDbRepinSelection&:&open&,&nwebRelatedAdvert&:&default&,&qaStickySidebar&:&sticky_sidebar&,&androidProfilePanel&:&panel_b&,&nwebWriteAnswer&:&experiment&}},&columns&:{&next&:{},&zjying2000&:{&following&:false,&canManage&:false,&href&:&\u002Fapi\u002Fcolumns\u002Fzjying2000&,&name&:&爬虫与数据分析&,&creator&:{&slug&:&zhou-yong-7-54&},&url&:&\u002Fzjying2000&,&slug&:&zjying2000&,&avatar&:{&id&:&v2-5fb289f2ea5fd1c0aec80f3680d8fce6&,&template&:&https:\u002F\\u002F{id}_{size}.jpg&}}},&columnPosts&:{},&columnSettings&:{&colomnAuthor&:[],&uploadAvatarDetails&:&&,&contributeRequests&:[],&contributeRequestsTotalCount&:0,&inviteAuthor&:&&},&postComments&:{},&postReviewComments&:{&comments&:[],&newComments&:[],&hasMore&:true},&favlistsByUser&:{},&favlistRelations&:{},&promotions&:{},&switches&:{&couldSetPoster&:false},&draft&:{&titleImage&:&&,&titleImageSize&:{},&isTitleImageFullScreen&:false,&canTitleImageFullScreen&:false,&title&:&&,&titleImageUploading&:false,&error&:&&,&content&:&&,&draftLoading&:false,&globalLoading&:false,&pendingVideo&:{&resource&:null,&error&:null}},&drafts&:{&draftsList&:[],&next&:{}},&config&:{&userNotBindPhoneTipString&:{}},&recommendPosts&:{&articleRecommendations&:[],&columnRecommendations&:[]},&env&:{&edition&:{&baidu&:false,&yidianzixun&:false,&qqnews&:false},&isAppView&:false,&appViewConfig&:{&content_padding_top&:128,&content_padding_bottom&:56,&content_padding_left&:16,&content_padding_right&:16,&title_font_size&:22,&body_font_size&:16,&is_dark_theme&:false,&can_auto_load_image&:true,&app_info&:&OS=iOS&},&isApp&:false,&userAgent&:{&ua&:&Mozilla\u002F5.0 (compatible, MSIE 11, Windows NT 6.3; Trident\u002F7.0; rv:11.0) like Gecko&,&browser&:{&name&:&IE&,&version&:&11&,&major&:&11&},&engine&:{&version&:&7.0&,&name&:&Trident&},&os&:{&name&:&Windows&,&version&:&8.1&},&device&:{},&cpu&:{}}},&message&:{&newCount&:0},&pushNotification&:{&newCount&:0}}

我要回帖

 

随机推荐