分享好友 最新动态首页 最新动态分类 切换频道
爬虫实战系列!淘宝店铺各品牌手机售卖信息爬取及可视化!
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

 

最新文章
得友短视频运营
如何做短视频运营一、定位命名创新互联建站主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务琼结,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220做短视频,首先要做的
淘宝刷收藏软件
你是否在淘宝上经常遇到收藏数不够的尴尬?又或者是想要提升店铺的人气却束手无策?那么,今天就让我们一起来了解一款能帮你解决这些问题的神奇软件吧!它就是——淘宝刷收藏软件。这款软件不仅可以帮助你快速增加收藏数,还能提升店铺的人
济源企业网络飞跃,SEO优化助力在线腾飞新引擎
济源网络推广SEO优化,是企业在线腾飞的强力新引擎。通过深度优化网站,提升搜索引擎排名,帮助企业扩大在线影响力,吸引潜在客户,实现高效网络营销。助力企业快速提升品牌知名度,抢占市场份额。随着互联网的飞速发展,已经成为企业拓展
重庆seo关键词工具(重庆SEO优化工具)
在当今数字化时代,搜索引擎优化(SEO)对于企业在线可见性和品牌建设至关重要,尤其是在竞争激烈的市场环境中,如中国西南地区的经济中心——重庆。为了有效提升网站排名,吸引目标客户,利用专业的SEO关键词工具成为了许多企业和SEO从业
打造吸睛力MAX的文章标题,网络推广优化秘籍大公开
在网络推广优化中,打造吸引眼球的精彩文章标题需遵循以下策略:抓住关键词,确保标题与内容高度相关;运用疑问句、数字或特殊符号,增加标题的吸引力;创造性地使用比喻、夸张等修辞手法,使标题更具趣味性;简洁明了,避免冗长,确保读者
英文简历模板:打造专业求职文档
简历是求职者向潜在雇主展示自己的第一份文件。它需要清晰地传达求职者的职业背景、技能和成就,以便吸引雇主的注意并获得面试机会。一个精心编写的简历能够在众多申请者中脱颖而出,因此了解其基本构成和框架至关重要。英文简
全方位品牌曝光度提升,关键词推广优化营销策略解析
本文针对关键词推广优化策略,详细阐述了全方位提升品牌曝光度的方法。通过精准定位、内容营销、多渠道推广等手段,有效提升品牌知名度和市场份额。策略包括优化关键词、提升内容质量、利用社交媒体等,助力企业实现品牌价值最大化。随着互
GPT-4.0来袭:人工智能新纪元即将开启
1.1 计算效率 GPT-4o在计算效率上有了显著提升。这意味着它可以在同样的硬件资源下处理更多的请求,或在相同时间内完成更多的任务。这对于高并发应用场景(如大型客服系统)来说尤为重要。 1.2 响应速度 由于优化了底层
最新寄生虫站群 揭秘最新寄生虫站群:网络生态新威胁
警惕“最新寄生虫站群”:一场网络黑帽SEO的隐秘之战在当今这个数字化时代,互联网已经成为人们获取信息、交流思想、开展业务的重要平台然而,随着网络技术的飞速发展,一些不法分子也利用技术手段进行非法活动,其中,“最新寄生虫站群”
百度蜘蛛池优化:深度解析搜狗收录蜘蛛池代运营,助力网站优化,提升流量转化
深度解析搜狗收录蜘蛛池代运营,助力网站优化。通过百度蜘蛛池优化,有效提升网站流量和转化率,实现高效SEO推广。本文目录导读:什么是搜狗收录蜘蛛池代运营?搜狗收录蜘蛛池代运营的优势搜狗收录蜘蛛池代运营的操作方法如何有效提升网站
相关文章
推荐文章
发表评论
0评