作者 | 阿广
编辑 | Jane
出品 | Python大本营
【导语】腊月二十八,你的年货都备齐了吗?今天的文章我们专门爬取了几千条年货购买数据,看看大家都在买什么,还分析了一些有意思的数据。下面就一起来看一下 2019 年的年货购买报告~
前言
作者 | 阿广
编辑 | Jane
出品 | Python大本营
【导语】腊月二十八,你的年货都备齐了吗?今天的文章我们专门爬取了几千条年货购买数据,看看大家都在买什么,还分析了一些有意思的数据。下面就一起来看一下 2019 年的年货购买报告~
前言
先看看今天将带大家分析哪些内容:
城市/农村购买年货占比
购买大军是80后还是90后?
年货年度高频词总结
卖年货的商铺排名
各个省的年货销量是什么情况?
年货订单最多的省份 TOP10 分析
年度商品热度 TOP3
本次爬虫使用 selenium,数据库使用 mysql,分词使用 jieba,图表显示使用 echars+wordart。
本文使用 selenium 爬取某宝共 4393 条有效数据,如有侵犯某宝权益,本人会及时删除整个项目。
使用 pymysql 连接数据库
1import pymysql.cursors
2conn = pymysql.connect(host='localhost',
3 user='root',
4 password='qweqwe',
5 db='taobao-aguang',
6 charset='utf8',
7 cursorclass=pymysql.cursors.DictCursor)
8cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
我们爬取的步骤是:搜索某宝网站->爬取年货->下一页
主函数 main()
1def main():
2 cursor.execute("create table if not exists products(price text, deal text, title text, shop text, location text)")
3 total = search()
4 total = int(re.compile('(\d+)').search(total).group(1))
5 for i in range(2, total + 1):
6 next_page(i)
7 browser.close()
8 conn.close()
搜索函数 search()
1def search():
2 try:
3 browser.get('https://www.taobao.com')
4 input = wait.until(
5 EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
6 )
7 submit = wait.until(
8 EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button'))
9 )
10 input.send_keys('年货')
11 submit.click()
12 total = wait.until(
13 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total'))
14 )
15 get_products()
16 return total.text
17 except TimeoutException:
18 return search()
获得某宝上下一页的内容 next_page(page_number)
1def next_page(page_number):
2 try:
3 input = wait.until(
4 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
5 )
6 submit = wait.until(
7 EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit'))
8 )
9 input.clear()
10 input.send_keys(page_number)
11 submit.click()
12 wait.until(
13 EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number))
14 )
15 get_products()
16 except TimeoutException:
17 next_page(page_number)
获得年货产品 get_products()
1def get_products():
2 wait.until(
3 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item' ))
4 )
5 html = browser.page_source
6 doc = pq(html)
7 items = doc('#mainsrp-itemlist .items .item').items()
8 for item in items:
9 product = {
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 }
16 print(product)
17 price = product['price']
18 deal = product['deal']
19 title = product['title']
20 shop = product['shop']
21 location = product['location']
22 sql = "insert into products(price,deal,title,shop,location) values('%s', '%s', '%s', '%s', '%s');" % (price, deal, title, shop, location)
23 try:
24 with conn.cursor() as cursor:
25 cursor.execute(sql)
26 conn.commit()
27 print('数据插入成功')
28 except Exception as e:
29 print('数据插入失败')
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#上传表单
2class Upload(Form):
3 pcap = FileField('pcap', validators=[DataRequired()])
然后对表单按照省份做分析得出年货订单 TOP10
可以看出,年货订单第一的省份为:广东省。广东人民是真有钱啊。
通过数据得出本年度商品热门为:
红内裤
红袜子
红手链
红红火火过大年,红色果然是首选,大家的年货都买了什么?
源码地址:
https://github.com/zandaoguang/year_goods
(本文为 Python大本营原创文章,转载请微信联系 1092722531。)
推荐阅读: