【python爬虫】京东商品分析

                                                                   基于python的电商商品价格分析

一、选题背景

   随着互联网的普及,网络购物已经成为了人们购物的首选,用户只需要在电商平台上进行自己喜欢的商品进行搜素,就可以得到成千上万条商品信息。而在购买商品时,商品价格就成为了用户的主要关注对象,而在一些特殊的日子里,例如618、双十一等等,许多商品都会降价以此来吸引顾客,降价的多少也成为了用户浏览商品的一个因素。因此,对商品降价的分析对用户是否购买该商品提供了对比性,具有一定的意义。

二、步骤

    要得到商品降价的多少,首先需要得到该商品降价前的价格和降价后的价格,然后再对每一件商品计算具体降价价格,为了便于分析,将数据进行可视化,以京东平台上的惠普笔记本电脑为例。

    只进行一页商品信息的获取,分析京东源代码可得到一页有60个商品,接下来进行着60个商品信息的提取。

1.商品信息的获取

(1)商品名称的获取

先在京东上找出惠普笔记本电脑的网址(URL=https://list.jd.com/list.html?cat=670,671,672&ev=exbrand_8740&page=1&sort=sort_totalsales15_desc&trans=1&JL=6_0_0#J_main)

【python爬虫】京东商品分析_第1张图片

    然后按“ctrl+shift+I”打开网页源码,找出商品名称位于哪个html代码段中,并用正则表达式进行内容的提取。分析网页源代码可知:商品名信息位于标签

之后的标签之内(蓝色黑字部分)。

    对应的正则表达式提取式为:\

\s*\    这个提取式只是将一段含有商品名称的html代码段提取出来,商品信息在提取之后的代码段中,用正则表达式\进行提取。

【python爬虫】京东商品分析_第2张图片

    最后将提取到的商品名称存储于一个列表name中,等待后续的使用。

(2)每件商品链接的获取

    观察图2,可知还是在同一部分,标签中的href属性对应的链接即为每件商品对应的url,点击之后进入的界面为该商品的主页面。

【python爬虫】京东商品分析_第3张图片

    在提取href时,使用的是正则表达式和bs4。用正则表达式进行html代码代码段的获取,然后用bs4进行href内容的获取,获取到的每件商品的链接存到一个列表comnum中,等待后续代码的使用。

    正则表达式提取的操作同上;bs4提取的操作为:soup.a['href']

(3)价格信息的获取

按“ctrl+shift+I”打开网页源码,找到价格对应html代码段,有价格信息。

【python爬虫】京东商品分析_第4张图片

    由于京东网页是动态加载的,经过提取该网页源代码后观察发现

 

    价格信息并不是存在于该网页中,可得知价格信息是通过js动态加载的,而html源码中并不包含有动态加载的页面内容。

    自然而然的就去js页面上去找,点击network 输入“??preview

”,如下图:

【python爬虫】京东商品分析_第5张图片

       接着在Preview界面按“ctrl+f”,输入“GetPriceNum”,可得到一个GetPriceNum函数,在这个函数里有URL,这个URL就是查询接口。

【python爬虫】京东商品分析_第6张图片

    实际上红线里的t.join(“,J_”)就是该商品的ID号,通过组装这个接口,就可进入到存储价格的json文件中,文件中的内容为:

【python爬虫】京东商品分析_第7张图片

    里面的“op”表示降价前的价格,“p”表示降价后的价格,通过json对象向python对象的转化,可得到价格信息,将这两项组成一个列表存储在一个大列表price_message中,等待后续代码的使用。

(4)商品信息组合进行存储

    在(1)(2)(3)得到的三个列表中,合成一个大列表,并存储到goods_message.txt中,其中前面的数字表示每一件商品的编号,可视化时将会用到。

【python爬虫】京东商品分析_第8张图片

2.可视化操作

(1)数据组合

    在1中已经将主要信息全部提取出来,可以进行计算商品优惠的价格,再将计算之后的价格加入到价格列表中,下图中第一列表示商品的编号,第二列表示降价前价格,第三列表示降价后价格,第四列表示商品优惠价格。

【python爬虫】京东商品分析_第9张图片

(2)进行雷达图的绘制

    运用pygal中的Radar()进行雷达图的绘制,相应的数据已经在上述过程中求得,绘制好的雷达图为:

【python爬虫】京东商品分析_第10张图片

    在优惠价格那一坐标轴上点击之后如下图,方框里的1600表示优惠的价格,27表示编号为27的惠普笔记本电脑,27号的型号为:

惠普(HP)EliteBook735G513.3英寸轻薄笔记本电脑(锐龙7PRO2700U8G256SSDWin10100%sRGB一年上门)。

【python爬虫】京东商品分析_第11张图片

三、工作评价和打分

1.工作评价

    代码上:在写代码的过程中,由于对python语言的陌生,刚开始写的时候比较艰难,但是随着对这门语言理解的加深,逐渐写的比较有感觉,因为没有见过比较高深的python项目,自己写的代码也比较简单,简单的列表和正则表达式的操作,让自己的代码看起来比较幼稚。

    知识获取上:在项目的编写工作中,认真找寻和这个项目有关的python知识,学习到了爬虫和可视化中pygal库的使用,学到了课堂上学不到的知识。

四、总结和建议

1.总结

    由于在这之前,没有接触过python这门语言,在一定程度上来说,这个项目还是与一定难度的。本项目一共分为两个部分:爬虫部分和数据可视化部分。爬虫部分涉及到网站反爬、网页源码的获取requests、正则表达式re、json库和bs4库的使用、动态网站的爬取以及一些基本的html、js知识。关于数据可视化部分,我使用的是Pygal库中雷达图的应用。

    对我来说,对动态网页的爬取是比较难的一部分,因为在动态网页中,我们要提取的信息并不在我们下载到的html中,而是在我们的某些操作下通过js事件动态生成的,这个时候,就需要进行js文件的分析,推断出隐藏信息的网址,然后从中提取信息。

    总体来说,自己python知识比较薄弱,代码中基本全是列表的操作,加之相应的比较简单的正则表达式操作,代码有一点冗余。但是我在这个项目中加深了对python的理解,了解了一些爬虫和数据可视化的知识,有比较大的收获。

2.对课程的批评和建议

(1)无批评。

(2)建议

    理论课:在平时的课堂上可以适当的介绍一些python项目(最好从易到难的推荐),可以让认真上python课的同学收获到更多的知识。

五、附录(代码)

# 运行之后会出现三个文件:
#   goods.svg为价格雷达图
#   goods_message.txt存储商品信息
#   url_content_computer.txt存储主网页源代码


# coding = utf-8
import re
from bs4 import BeautifulSoup
import requests
import json
import pygal


def goods_message_to_file(text):
    """进行商品信息的提取"""
    # 将网页内容存储到文件中
    with open("url_content_computer.txt",'w+',encoding='utf-8') as fp:
        fp.write(text)
    # 进行内容的提取
    rem = re.compile(r'\
\s*\

 

你可能感兴趣的:(python学习)