分享好友 最新动态首页 最新动态分类 切换频道
爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!
2024-11-07 23:16

声明:本博客只是简单的爬虫示范,并不涉及任何商业用途。

爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!

最近博主在浏览淘宝时突然萌发了一个想爬它的念头,于是说干就干,我便开始向淘宝“下毒手”了。由于本人平时经常喜欢在淘宝上浏览各种手机的信息,于是我便以“手机”为关键词进行搜索,最后我利用爬虫获取了所有相关的手机信息,并对各种厂家生成手机的销量进行了一波可视化,下面是完整的记录过程。

首先,我在浏览器中打开淘宝,然后登录后以手机为关键词进行搜索,得到如下链接

https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200911&ie=utf8
1

但当我用requests库请求该url时,结果却发现要先登录,即会出现下述界面

这个问题要如何解决呢?我首先想到的是利用cookie,于是我便在登录淘宝时,通过Chrome浏览器的开发者工具获取到了登录淘宝的cookie,然后我将该cookie作为参数传入reqeusts库的相关函数,结果发现成功获取到想要的页面

在页面的下方可以看到手机售卖的页面共有100页,那么要如何获取到对应的页面呢?我先点击下方的按钮获取到了几个页面的url,展示如下

https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200911&ie=utf8&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44
https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200911&ie=utf8&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88
https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_

根据观察上述url中变化的只有bcoffset,ntoffset以及s,但是只有最后一个参数s改变才会使得页面翻转,而最后一个参数s是递增的,每次增加44,因此我们可以通过改变s来获取翻页的URL。

在淘宝页面右键->查看源代码,可以发现数据数据隐藏在名为g_page_config的json对象里面

因此,可以先通过正则表达式将其过滤出来,然后利用json模块将其加载为python对象,之后便可以对其进行数据提取(详细的提取过程参加后面的完整代码),需要提取的数据展示如下

综合以上几点,淘宝手机信息爬取的流程图如下图所示

完整的爬虫程序展示如下

from bs4 import BeautifulSoup
import requests
import re
import json
import random
import pandas as pd
import traceback
IPRegular = r"(([1-9]?d|1d{2}|2[0-4]d|25[0-5]).){3}([1-9]?d|1d{2}|2[0-4]d|25[0-5])"
headers = {
    "User-Agent": "换成自己的User-Agent",
    "cookie": "换成自己登录的淘宝cookie"
}
def ExtractIP(url="https://ip.ihuan.me/"):
    """
    功能:抓取IP,返回IP列表
    url:抓取IP的网站
    """
    IPs = []
    response = requests.get(url)
    soup = BeautifulSoup(response.content,"lxml")                                
    tds = soup.find_all("a",attrs = {'target':'_blank'})
    for td in tds:
        string = td.text
        if re.search(IPRegular,string) and string not in IPs:
            IPs.append(string)
    print(IPs)
    return IPs
def Filter(mobile_infos):
    """
    功能:过滤出手机的相关信息
    mobile_infos"""
    mobile_list = [] #存储手机信息的列表
    for mobile_info in mobile_infos:
        title = mobile_info['raw_title']
        price = mobile_info['view_price']
        loc = mobile_info['item_loc'].replace(' ','')
        shop = mobile_info['nick']
        #print(mobile_info['view_sales'])
        sales = re.search(r'(d+.?d*).*人付款',mobile_info['view_sales']).group(1)
        if sales[-1] == '+':#去掉末尾的加号
            sales = sales[:-1]
        if '万' in mobile_info['view_sales']:
            sales = float(sales) * 10000
        print(title,price,loc,shop,int(sales),mobile_info['view_sales'])
        mobile_list.append([title,price,loc,shop,int(sales)])
    return mobile_list
def Saver(mobiles):
    """
    功能:保存爬取信息
    mobiles:手机信息列表
    """
    mdata = pd.Dataframe(mobiles,columns=['手机名','价格','店铺位置','店铺名','销量'])
    mdata.to_csv('mobile_info.csv',index=False)
def Spider(page_nums = 100):
    """
    功能:爬虫主程序
    page_nums:待爬取的页数
    """
    #爬取代理IP
    IPs = ExtractIP()
    length,mobiles,i = len(IPs),[],0
    while i < page_nums:
        try:
            print('--------------------正在爬取第{}页--------------------'.format(i + 1))
            url = "https://s.taobao.com/search?q=%E6%89%8B%E6%9C%BA&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=0&p4ppushleft=1%2C48&data-key=s&data-value={}".format(i*44)
            #设置代理ip
            index = random.randint(0,length - 1)
            proxies = {"http":"{}:8080".format(IPs[index])}
            #请求网页
            response = requests.get(url,headers=headers,proxies=proxies)
            #利用正则表达式获取包含手机信息json数据
            match_obj = re.search(r'g_page_config = (.*?)};',response.text)
            #将json对象加载为python字典
            mobile_infos= json.loads(match_obj.group(1) + '}')['mods']['itemlist']['data']['auctions']
            #过滤出字典中的有用信息
            mobiles += Filter(mobile_infos)
            i += 1
        except Exception:
            traceback.print_exc()
            print('手机信息第{}页爬取失败'.format(i + 1))
            i += 1
    #保存手机信息为csv文件
    Saver(mobiles)
if __name__ == "__main__":
    Spider()

利用上述方式将爬取的数据保存为csv文件,部分结果截图展示如下

通过爬虫一共获取到4400多条记录,但其中有没有重复数据呢,于是我通过pandas来对其进行重复行统计,结果确实返现不少重复行,对应处理代码如下

import pandas as pd
mdata = pd.read_csv('mobile_info.csv')
print(mdata[mdata.duplicated()])
"""
                                                    手机名       价格  店铺位置                   店铺名    销量
61    【限时限量抢】Apple/苹果iPhone SE全网通手机苏宁易购官方旗舰店Store国行正...  3299.00  江苏南京             苏宁易购官方旗舰店  2998
92                                 糖果手机Sugar Y9指纹识别全网通5   399.00  广东深圳            sugar手机旗舰店     6
93                       现货OnePlus/一加 A6010一加6T手机1+6T手机  1439.00  广东深圳                  港柏数码   301
136                                糖果手机Sugar Y9指纹识别全网通5   399.00  广东深圳            sugar手机旗舰店     6
137                      现货OnePlus/一加 A6010一加6T手机1+6T手机  1439.00  广东深圳                  港柏数码   301
180                                糖果手机Sugar Y9指纹识别全网通5   399.00  广东深圳            sugar手机旗舰店     6
181                      现货OnePlus/一加 A6010一加6T手机1+6T手机  1439.00  广东深圳                  港柏数码   301
                  ...      ...   ...                   ...   ...
"""

因此我在这里进行了相应的去重处理,代码为

mdata.drop_duplicates(inplace=True)
1

在完成去重后,我对各手机的销量进行了统计,最后利用matplotlib将统计数据绘制成了直方图,下面是对应的结果

可以看出华为,小米和苹果占据了销量的前三甲。

完整项目地址:源码 以上便是本文的全部内容,要是决定不错的话就点个赞支持一下吧,你们的支持是博主创作的不竭动力!另外在这里需要说明一下,我爬取的数据可能不齐全,最后的各手机厂家销量展示也不具有权威性,仅仅是博主的自娱自乐,敬请批评指正。

此文转载!著作权归作者所有,如有侵权联系小编删除

原文地址:https://blog.csdn.net/qq_42103091

 

最新文章
Python爬虫:教你四种姿势解析提取数据
翻页查看url变化规律:start参数控制翻页,start = 25 * (page - 1) 正则表达式是一个特殊的字符序列,它能帮助你方便地检查一个字符串是否与某种模式匹配,常用于数据清洗,也可以顺便用
网站推广与优化,品牌影响力提升,企业腾飞之道
网站推广与优化是提升品牌影响力的关键,通过精准策略和优化措施,助力企业品牌形象提升,市场份额扩大,实现快速腾飞。在互联网高速发展的今天,网站已成为企业展示形象、拓展市场、服务客户的重要平台,而网站推广与优化作为网站的重要组
外链规划大师:建立高质量反向链接的终极指南
在当今竞争激烈的在线环境中,建立高质量的反向链接对于网站的成功至关重要。反向链接不仅可以提高您的搜索引擎排名(SERP),还可以提高网站的信誉和权威。然而,外链建设是一个复杂且耗时的过程,需要周密的规划和执行策略。本网站外链规划
企微二维码管理神器支持不同渠道统计/渠道标签/自动修改渠道备注
一款卓越的二维码管理工具凭借其对不同渠道统计、渠道标签以及自动修改渠道备注等一系列实用功能的强大支持,成为众多企业在数字化浪潮中乘风破浪的得力助手,而这一切神奇功效的实现,皆借助第三方工具的匠心独运。先看其不同渠道统计功能
网站推广优化建设实战案例解析,企业腾飞策略揭秘
本案例深入解析网站推广优化建设,分享实战策略,助力企业提升网站流量、增强用户互动,实现网络营销腾飞。通过实际案例分析,为企业提供高效网站推广优化解决方案。在互联网高速发展的今天,网站已经成为企业展示形象、拓展市场、提升品牌
虫虫SEO教程,介绍搜索引擎优化之路,助力企业腾飞
随着互联网的飞速发展,搜索引擎优化()已成为企业提升品牌知名度、扩大市场份额的重要手段。虫虫SEO,作为我国SEO领域的佼佼者,为广大企业和SEO从业者提供了丰富的实战经验。本文将结合虫虫SEO教程,为大家揭秘搜索引擎优化之道,助力企
百度首页排名优化价格—推广加微信,排名1-3天上首页!
我司是专业的分享信息发布平台,拥有众多高权重网站,擅长通过百度霸屏策略实现流量最大化,并配备智能系统自动挖掘高流量关键词。我们能在短时间内迅速提升排名,确保流量稳定增长。针对您面临的排名波动、效果评估难、内容优化挑战、流量
掌握SEO竞争分析利器,助力企业乘风破浪,脱颖而出
本摘要揭示了网站SEO竞争分析工具的重要性,该工具助力企业通过深入分析竞争对手,精准定位自身SEO策略,从而在激烈的市场竞争中占据有利地位,实现脱颖而出。网站SEO竞争分析工具概览网站SEO竞争分析工具是一种运用技术手段,对竞争对手网
成品网站1.1.719如何助力中小企业高效打造品牌网站?平台表示:将为大家深入分析其优势与特色。
在互联网经济高速发展的今天,中小企业正面临如何快速、高效建立品牌网站的巨大挑战。成品网站1.1.719凭借其强大的功能和灵活的设计,成为中小企业打造线上品牌的不二选择。这款工具不仅降低了建站门槛,还提供了丰富的功能模块,帮助企业
文案写手小红书:打造爆款笔记的秘籍395
在小红书这个内容营销沃土上,文案写手扮演着至关重要的角色。优质的文案,能够吸引用户目光、激发互动、促成转化。本文将针对文案写手小红书写作,分享打造爆款笔记的秘诀,助力你成为小红书内容营销达人。掌握小红书文案独家风格小红书文
相关文章
推荐文章
发表评论
0评