1、页面解析


主要获取每一行单品数据信息,以及翻页的页码
观察URL组成:
https://xiapi.xiapibuy.com/api/v2/search_items/?
GET参数:
by=pop&limit=30&match_id=178302698&newest=120&order=desc&page_type=shop&version=2
参数解释:
match_id:每个店铺对应的店铺id
limit:每一页显示商品数
newest:辅助参数,当前所在页乘以每页商品数得出

2、抓包请求调试

抓包观察数据,优先观察headercookie
抓包看到cookie参数过多,没有办法一一解析,尝试不添加任何cookie进行二次请求

上述图是没有添加任何cookie的请求记录,可以看到数据是正常返回,所以cookie的参数可以暂时不用考虑。

观察headers,发现 If-None-Match 属于动态参数,每次翻页都动态生成,服务器主要是通过该参数与第一次请求的参数做匹配,如果是一致则直接返回缓存数据给到前端,我是搜索资料简单理解的,如有错误,请指正。

If-None-Match 既然是属于动态参数,优先考虑的是删除后是否可以正常访问,所以需要尝试第三次请求测试做进一步观察

通过多次观察得出,就算不添加 If-None-Match 数据也是可以正常返回的,不过存在异常,一些关键字段会返回NULL,以及 Total_count 的数据每次都会不同。
返回的Response是一个json格式,里面的total_count参数代表全店的商品数,在后面需要直接判断需要翻页的页数,属于关键参数,必须准确获取到。

3、JS代码断点调试

最常见也是最简单粗暴的方法是直接搜索参数名称,对全站文件检索,看下参数是怎样动态形成的。

观察上图,直接搜索参数名称 If-None-Match 只有一个返回结果,显示在jquery-1.7.2.min.js文件中出现了这个关键字,其中的代码是一个历遍对比匹配的功能,并没有涉及到参数的生成,而且这个js文件不是网站的静态资源,是通过https://code.jquery.com 站点直接引用过来的,不是网站自己的东西,就没有修改权,所以可以判断,这个文件对我们没有实际帮助意义直接忽略!

既然直接搜索参数名称,没有作用,尝试第二种方式
在GET请求的时候设定断点,单步调试观察。
前面说过URL的组成部分 https://xiapi.xiapibuy.com/api/v2/search_items/,其中涵盖后缀 search_items 关键字,尝试搜索关键字看封装的请求函数里面是有所发现。

搜索等到的结果很多,仔细对比后,一个名为api.js的文件成功引起了我的注意。
就是一个请求返回的封装,对该函数设定断点,然后进行单步调试观察。

多次对比发现,找到关键所在,add_api_headers.js 文件成功找到了该headers关键字的组成,它是把关键字拆分开单个字母单词,然后进行拼接,也是一开始搜索的时候并没有发现它的关键原因。

继续进行单步调试,距离目标值不远了。。。。

功夫不负有心人,多次断点调试观察后终于发现目标所在,代码可以直接看出参数的构成:
API_HEADER_VERSION + md5(query) +API_HEADER_VERSION
API_HEADER_VERSION是固定值,55b03
query 就是我们请求的URL组成的后半部分,然后字符串进行md5的加密处理。

# Python 字符串 MD5 加密
def md5_convert(string):m = hashlib.md5()m.update(string.encode())return m.hexdigest()

所有请求参数已经具备,正式开始撸码吧!

4、Python请求代码

def spider(self):result = dict()url = 'https://xiapi.xiapibuy.com/api/v2/search_items/?'s = requests.session()page = 0while True:query = 'by=pop&limit=30&match_id={}&newest={}&order=desc&page_type=shop&version=2'.format(self.MATCH_ID, page * 30)query_md5 = md5_convert(query)If_None_Match = self.API_HEADER_VERSION + query_md5 + self.API_HEADER_VERSIONIf_None_Match = self.API_HEADER_VERSION + '-' + md5_convert(If_None_Match)try:response = requests.get(url + query, headers=headers)items = response.json()['items']if items:print('当前页数:', page + 1, ' 总数:', response.json()['total_count'])while items:item = items.pop()result[str(item['itemid'])] = {'name': item['name'],'price': item['price']}else:breakexcept Exception as err:print(err)breakpage += 1

5、总结

在很多实际操作中,可能并没有那么顺利,当然,文章简短,当中的过程很多也是已经被简化,一开始由于没抓准关键点,在断点调试中费了不少时间,学海无涯,与大家一起共勉吧。上述总结两点,多点耐心,擦亮眼睛。

购物平台全店商品爬虫案例相关推荐

  1. python爬虫爬商品库存_利用Python爬虫爬取指定天猫店铺全店商品信息

    本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取. 源码展示 首先还是完 ...

  2. 利用Python爬虫爬取指定天猫店铺全店商品信息

    本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取. 源码展示 首先还是完 ...

  3. 京东618按照SPU展示,全店商品如何提取?

    京东SKU是什么?SPU又是什么?在京东平台上有一些专业术语非常相似,很多新手卖家分不清楚它们具体的意义有何不同.2022年京东618转眼就要拉开帷幕了,各路商家都在蓄势待发,筹备618大战.其中京东 ...

  4. 淘宝双十一前夕上线一键排查违禁词和全店商品工具

    新广告法的实施,许多商家还未跟上节奏从而违反,淘宝网推出商品自检工具,帮助淘宝商家一键排查违禁词&全店商品,1秒排查违禁词真相 ,3分钟排查全店商品,查点即罚点.现已在商家后台上线,操作指南如 ...

  5. 金融数据分析(三)当当网店铺商品爬虫——爬虫类书籍为例:requestsbs4

    案例(二)爬虫预热 项目一:当当网店商品爬虫--爬虫类书籍为例 此案例是运用bs4库find方法对相关内容进行抓取. -*- coding: utf-8 -*- import requests imp ...

  6. python爬虫案例——百度贴吧数据采集

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--百度贴吧数据采集 通过python实现百度贴吧页面的内容采集是相对来说比较容易的,因为百度贴吧不需要登陆,不需要coo ...

  7. python爬虫案例——糗事百科数据采集

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--糗事百科数据采集 通过python实现糗事百科页面的内容采集是相对来说比较容易的,因为糗事百科不需要登陆,不需要coo ...

  8. python爬虫案例——csdn数据采集

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--csdn数据采集 通过python实现csdn页面的内容采集是相对来说比较容易的,因为csdn不需要登陆,不需要coo ...

  9. 艾司博讯:拼多多全店推广是什么意思?

    大家都知道要把拼多多店铺做成功,店铺推广是很重要的,拼多多推广的方式也是有很多的,那么大家知道什么是全店推广吗?全店推广有什么好处吗?接下来艾司博讯小编讲给大家讲讲什么是拼多多全店推广,以及拼多多全店 ...

最新文章

  1. 合肥工业大学—SQL Server数据库实验七:数据查询
  2. 王者荣耀AI绝悟如何选英雄?腾讯AI Lab新研究揭秘
  3. 大多数日志文件的后缀名是_编程小短文:find,让你随心所欲查找整块磁盘的任意文件...
  4. php 数组美化_php 打印数组格式化显示
  5. 嵌入式系统开发者需要掌握什么技术?
  6. Why Redis 4.0?
  7. php 传递resource参数,php define的第二个参数使用方法_php技巧 - is_resource
  8. java 静态成员 创建_Java学习笔记11---静态成员变量、静态代码块、成员变量及构造方法的初始化或调用顺序...
  9. 将多个文件绑在一起执行
  10. android之字体阴影效果
  11. datavideo切换台说明书_GoPro结合洋铭切换台现场节目制作
  12. 二叉树的层序遍历与镜像翻转js
  13. 战略游戏——树形dp+状态机——没有上司的舞会翻版
  14. python怎样发音_python在线发音_python翻译
  15. java导出excel文件(标题为中文乱码)
  16. 汉堡大学计算机科学,汉堡大学 - 录取条件,专业,排名,学费「环俄留学」
  17. Java之环境变量配置
  18. 【GIS教程】在谷歌地图中快速导出区域地形图
  19. 程序化广告(5):广告投放
  20. java startw_java-Jetty(9.4.12):上下文启动失败o.e.j.w.WebAp...

热门文章

  1. JAVA练习243-唯一摩尔斯密码词
  2. linux 16中文输入法,ubuntu 16.04 下安装并切换搜狗中文输入法
  3. 代码写的太乱?一分钟教你优化
  4. android 4.0 app2sd,安卓手机开启App2sd必看教程
  5. 现在才发现:敏捷迭代的好处实在太多了
  6. docker容器的资源消耗
  7. iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
  8. 工商管理专业知识与实务(初级)【1】
  9. redis的使用(转载自:http://www.cnblogs.com/edisonfeng/p/3571870.html)
  10. spring中的hibernate-validate数据校验