在Amazon,Aliexpress之后,又一个海外电商出现在我的视野里——shopee,在东南亚很火的电商平台。
这战略布局都到南美跟欧洲了
这网站有意思的是啊,每个国家的商品虽然大同小异,但是也能凸显各个国家的风格的,比如印度的shopee,一股阿三的气息。
对味儿了
一、请求分析:
地址:https://xxxxxx.tw/daily_discover?pageNumber=1,这次就以台湾站为例。
老步骤:清理cookie,打开开发者模式,重新请求:
查看当前连接的请求,看返回内容的长度可知数据绝对不在这里。
找这种网站的信息,个人的经验是先去这个链接的请求(一般在DOC)先去碰碰运气,是不是直接的get请求。要是前后端分离的数据,就去XHR或者JS里面去找,有的请求会返回正好的json数据,而有的就是js需要自己去做数据清洗。
所以只能一个一个往下找,于是找到了这个请求:https://xxxxxx.tw/api/v4/recommend/recommend?bundle=daily_discover_main&item_card=2&limit=60&offset=0
这个链接返回的是数据的json,新开一个无痕窗口打开发现并不需要cookie就可以直接获取,又是一个简单的get请求。要是需要cookie的话有可能会需要额外处理,但是这个网站正好,不需要。
(这篇文章我是边看边写的,没想到这个请求还是那么简单。)
那么下面的任务就是进行请求和数据解析,拿到想要的数据即可。
二、请求
处理好请求头,设置好代理,直接get请求连接:
def getRes():url = "https://shopee.tw/api/v4/recommend/recommend?bundle=daily_discover_main&item_card=2&limit=60&offset=0"headers = {"authority": "shopee.tw","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",}res = requests.get(url,headers=headers,proxies=getApiIp())datas = res.json()['data']['sections'][0]['data']['item']for data in datas:print(data)
这些数据很简单的就获取到了,也没有很复杂。重要的是不要太频繁请求罢了,容易封号封IP。
那有没有好一点的办法呢?用代理啊!
ipidea支持全球国家代理,支持api和账密请求,高效高质量,新用户可以白嫖流量!
地址:http://www.ipidea.net/?utm-source=csdn&utm-keyword=?wb
三、数据处理
本次就获取 链接、商品名、最高价、最低价、图片 这几个字段。
链接url是由域名+商品名+shopid+itemid组成的,一时间居然没看出来。
datas = res.json()['data']['sections'][0]['data']['item']for data in datas:iteminfo = {}iteminfo['url'] = f"https://shopee.tw/{data['name']}-i.{data['shopid']}.{data['itemid']}"iteminfo['name'] = data['name']iteminfo['price_min'] = data['price_min']iteminfo['price_max'] = data['price_max']imagelist = []for image in data['images']:imagelist.append(f'https://cf.shopee.tw/file/{image}')iteminfo['pic'] = ";".join(imagelist)print(iteminfo)
处理结果如下:
四、写在最后
最近写了一些电商的文章,都是边看边写的,以为会带来点新鲜的。搞了半天请求的部份都是比较简单的,而这次的shopee请求的居然是现成的json。希望这些能给需要获取电商信息的朋友一点点思路。
最后附上整体的代码:
def getRes():url = "https://shopee.tw/api/v4/recommend/recommend?bundle=daily_discover_main&item_card=2&limit=60&offset=0"headers = {"authority": "shopee.tw","accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",}res = requests.get(url,headers=headers,proxies=getApiIp())datas = res.json()['data']['sections'][0]['data']['item']for data in datas:iteminfo = {}iteminfo['url'] = f"https://shopee.tw/{data['name']}-i.{data['shopid']}.{data['itemid']}"iteminfo['name'] = data['name']iteminfo['price_min'] = data['price_min']iteminfo['price_max'] = data['price_max']imagelist = []for image in data['images']:imagelist.append(f'https://cf.shopee.tw/file/{image}')iteminfo['pic'] = ";".join(imagelist)print(iteminfo)getRes()