作者 | 阿广
编辑 | Jane
出品 | Python大本营
【导语】腊月二十八,你的年货都备齐了吗?今天的文章我们专门爬取了几千条年货购买数据,看看大家都在买什么,还分析了一些有意思的数据。下面就一起来看一下 2019 年的年货购买报告~
前言
先看看今天将带大家分析哪些内容:
城市/农村购买年货占比
购买大军是80后还是90后?
年货年度高频词总结
卖年货的商铺排名
各个省的年货销量是什么情况?
年货订单最多的省份 TOP10 分析
年度商品热度 TOP3
技术分析
本次爬虫使用 selenium,数据库使用 mysql,分词使用 jieba,图表显示使用 echars+wordart。
数据介绍
本文使用 selenium 爬取某宝共 4393 条有效数据,如有侵犯某宝权益,本人会及时删除整个项目。
实现过程
使用 pymysql 连接数据库
1importpymysql.cursors
2conn = pymysql.connect(host='localhost',
3user='root',
4password='qweqwe',
5db='taobao-aguang',
6charset='utf8',
7cursorclass=pymysql.cursors.DictCursor)
8cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
我们爬取的步骤是:搜索某宝网站->爬取年货->下一页
主函数 main()
1defmain():
2cursor.execute("create table if not exists products(price text, deal text, title text, shop text, location text)")
3total = search()
4total = int(re.compile('(\d+)').search(total).group(1))
5foriinrange(2, total +1):
6next_page(i)
7browser.close()
8conn.close()
搜索函数 search()
1defsearch():
2try:
3browser.get('https://www.taobao.com')
4input = wait.until(
5EC.presence_of_element_located((By.CSS_SELECTOR,'#q'))
6)
7submit = wait.until(
8EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button'))
9)
10input.send_keys('年货')
11submit.click()
12total = wait.until(
13EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.total'))
14)
15get_products()
16returntotal.text
17exceptTimeoutException:
18returnsearch()
获得某宝上下一页的内容 next_page(page_number)
1defnext_page(page_number):
2try:
3input = wait.until(
4EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > input'))
5)
6submit = wait.until(
7EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit'))
8)
9input.clear()
10input.send_keys(page_number)
11submit.click()
12wait.until(
13EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number))
14)
15get_products()
16exceptTimeoutException:
17next_page(page_number)
获得年货产品 get_products()
1defget_products():
2wait.until(
3EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist .items .item'))
4)
5html = browser.page_source
6doc = pq(html)
7items = doc('#mainsrp-itemlist .items .item').items()
8foriteminitems:
9product = {
10'price': item.find('.price.g_price.g_price-highlight').text(),
11'deal': item.find('.deal-cnt').text()[:-3],
12'title': item.find('.row.row-2.title').text(),
13'shop': item.find('.shop').text(),
14'location': item.find('.location').text()
15}
16print(product)
17price = product['price']
18deal = product['deal']
19title = product['title']
20shop = product['shop']
21location = product['location']
22sql ="insert into products(price,deal,title,shop,location) values('%s', '%s', '%s', '%s', '%s');"% (price, deal, title, shop, location)
23try:
24withconn.cursor()ascursor:
25cursor.execute(sql)
26conn.commit()
27print('数据插入成功')
28exceptExceptionase:
29print('数据插入失败')
统计结果
2019 年春节前几天,我用了海量数据为大家解读中国年货的“迁徙”图景,呈现一个消费升级、红红火火的中国年!
下面我们看一下城市/农村占比,移动端和PC端购买年货占比
1# 农村成交占比
2x_major_Locator = MultipleLocator(country.number)
3# 移动端成交占比
4y_major_Locator = MultipleLocator(city.number)
5
6plt.figure(1)
7plt.grid(True, linestyle="-", color="b", linewidth="0.5")
结果如下:
下面分析一下购买的主力军是 90 后还是 80 后呢?下面是结果!
1# 80后人数
2x_major_Locator = MultipleLocator(eight.number)
3# 90后人数
4y_major_Locator = MultipleLocator(nine.number)
5# 其他人数
6z_major_Locator = MultipleLocator(other.number)
7
8plt.figure(1)
9plt.grid(True, linestyle="-", color="b", linewidth="0.5")
可见 80 后的购买力量依然是大于 90 后的。
通过分析数据,使用苹果作为基础模板,得到了热门年货搜索词表。
某宝上的年货统计词中,年货、零食、大礼包、批发、礼盒等词语出现较多。
你们想知道备年货的商铺中所占的比例各多少吗?下面来看一看!
通过上表可看出,某猫超市卖年货的商家占了半壁江山,意料之内。第二名是 gigwwx,这是什么鬼?刚才查了一下,原来是卖喜糖的企业店,大家要甜甜蜜蜜呀~
那么全国范围内各省的年货销量是什么情况呢?
总体来看,沿海地区的销量领先于内地地区。可见,浙江,上海,江苏等年货销量较大,也许是和浙江温州皮革厂倒闭了有关系?
下面让我们来看一下销量和价格的关系:
整体的趋势是价格越高,销量越少。
将数据上传到表单中
1#上传表单
2classUpload(Form):
3pcap = FileField('pcap', validators=[DataRequired()])
然后对表单按照省份做分析得出年货订单 TOP10
可以看出,年货订单第一的省份为:广东省。广东人民是真有钱啊。
通过数据得出本年度商品热门为:
红内裤
红袜子
红手链
红红火火过大年,红色果然是首选,大家的年货都买了什么?
源码地址:
https://github.com/zandaoguang/year_goods
领取专属 10元无门槛券
私享最新 技术干货