以得物商品列表数据为例,打造python爬虫

原创来自本人的公众号:阿嚏个技术

公众号文章地址: 如何打造python爬虫,以得物商品列表数据为例

文章仅限学习交流所用,禁止商业用途,如有不适,请联系作者删除。

1、爬虫思路

其实就是解决爬什么,怎么爬的问题。

爬什么好解决,一般都是看中一个网站的数据,采集到本地进行分析整理。接着就是针对需要爬的页面进行分析,页面分析的过程就是解决怎么爬的问题,包括页面请求的地址、请求的参数、返回的数据格式等,这些相关问题搞清楚了,就可以用程序模拟用户的请求去获取想要的数据。

本文通过得物微信小程序分析入手,获取品牌商品列表来获取在得物上架的商品信息。当然,得物的反爬虫技术也一直在提升,本文更多提供的实现爬虫的思路。

2、所需工具

工具主要三种。

一是数据监控分析工具,用于检测得物小程序和得物后台请求交互的监控,了解request和response的情况。采用的是Charles,看下图,主要是右边的内容,1为请求的url地址和参数,2为请求的头,3为response返回的数据,使用上比较简单,网上很多教程,不在此赘述。

二是反编译小程序

这一步的主要作用是获取签名算法,这样才能保证每次一发出得物服务器能鉴权识别的请求。首先是获取小程序在电脑上的包,在charles抓取的请求中,有一个header的参数是Referer,如下:

https://servicewechat.com/wx3c12cdad4e8b1a7b/255/page-frame.html

搜索其中“wx3c12cdad4e8b1a7b”所在目录下的255子目录,会找到一个_APP_.wxapk的文件,这个就是我们要反编译的包,我用的是mp-unpack这个工具,使用上也非常简单,把wxapk包拖到界面上就可以反编译出代码,如何根据反编译代码找到sign的方法,网上也有很多文章,就不在这里讲了,后面会直接给出代码的实现。

三是编程工具

原则上用任何一种语言都可以编爬虫,选择对应的IDE工具开发就可以,这里用python来实现,能做爬虫的一般都不陌生。

3、代码实现

首先定义请求所需的url和请求头header

brand_special_list_url = 'https://app.dewu.com/api/v1/h5/search/fire/commodity/detail_brand'headers = {    'Host': "app.dewu.com",    'appid': "wxapp",    'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat",    'Wxapp-Login-Token': '',    'appversion': "4.4.0",    'content-type': "application/json",    'platform': "h5",    'Accept-Encoding': "gzip, deflate, br",}

其次定义接口请求函数:

def brand_list_load_more_data(lastId, brandId, sortType, sortMode=1):    '''    获取品牌列表页    :param lastId:    :param brandId:    :param sortType:1、销量,2、价格,3、新品    :param sortMode:0、升序,1、降序(对价格)或随机    :return: response text    '''    # 品牌列表页商品接口    post_data = {        'brandId': brandId,        'lastId': lastId,        'sortType': sortType,        'sortMode': sortMode,        'limit': 20,        'categoryIds': '',        'debugAgg': 'true',        'aggregation': 'true'    }    sign = getsign(post_data)    res_data = request_post(brand_special_list_url, headers=headers, data=json.dumps(post_data), is_proxy=is_proxy)    return res_data

然后是定义sign的生成函数,其实就是把请求数据排序后做md5:

def getsign(dic):    s = str()    for i in sorted(dic):        s += i + str(dic[i])    res = s + "一个定义好的常量" #具体值见本人公众号文章    h1 = hashlib.md5()    h1.update(res.encode(encoding='utf-8'))    return h1.hexdigest()

那么程序的主要核心代码就完成了,运行调用

brand_list_load_more_data(0,144,1)

表示按销量获取nike的商品列表,其中144为品牌nike的编号。执行后获取到前20个商品的数据。

至此,用python以得物为例爬取数据的过程就完成了,因为商家一直会阻止反爬行为,所以爬虫程序本身不是一成不变的,比如得物的接口地址、加签名方式、加滑动块验证(得物滑动块的验证请见本人的另一篇文章《得物采集数据出现geetest验证码的解析方式》)等,都是在不断进化中的,但是,但是,爬虫的思路基本不会变,一定要做好采集对象的技术分析。

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值