cenjy9 发表于 2023-2-7 01:29

【原创】淘宝关键词搜索爬取与解析

本帖最后由 cenjy9 于 2023-2-7 01:30 编辑

<table><tr><td bgcolor=orange>本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!</td></tr></table>

****

### 淘宝关键词搜索及X5滑块

> `环境`
>
> - win10、mac
> - Python3.9


### 根据关键词获取品牌列表

![在这里插入图片描述](https://img-blog.csdnimg.cn/0b5e34e4941c429bae9b2e87d1bf3aa0.png)
先根据搜索关键词获取到所有的品牌id:也就是ppath参数,目的是这样可以筛选更精准的数据,因为默认只显示100页数据

```python
    def get_brand(self):
      """
      根据关键词获取品牌列表
      """
      headers = {
            "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",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "no-cache",
            "Connection": "keep-alive",
            "Pragma": "no-cache",
            "Referer": "https://s.taobao.com/search?q=^%^E7^%^AC^%^94^%^E8^%^AE^%^B0^%^E6^%^9C^%^AC^%^E7^%^94^%^B5^%^E8^%^84^%^91&imgfile=&js=1&stats_click=search_radio_tmall^%^3A1&initiative_id=staobaoz_20230127&tab=mall&ie=utf8&bcoffset=0&p4ppushleft=^%^2C44&style=grid&s=0",
            "Sec-Fetch-Dest": "document",
            "Sec-Fetch-Mode": "navigate",
            "Sec-Fetch-Site": "same-origin",
            "Sec-Fetch-User": "?1",
            "Upgrade-Insecure-Requests": "1",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
            "sec-ch-ua": "^\\^Not_A",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "^\\^Windows^^",
      }
      cookies = {
            "cookie2": "1c1f03c4df47307258a30c65ce1db555",
      }
      url = "https://s.taobao.com/search"
      params = {
            "q": self.word,
            "imgfile": "",
            "js": "1",
            "stats_click": "search_radio_tmall^%^3A1",
            "initiative_id": "staobaoz_20230127",
            "tab": "mall",
            "ie": "utf8",
            "style": "grid"
      }
      # response = requests.get(url, headers=headers, params=params)
      response = self._parse_url(url=url, headers=headers, params=params)
      if not response:
            yield None
      # print(response.text)
      res = re.findall(r'g_page_config = (.*?)};', response.text, re.M | re.S)
      if not res:
            yield None
      datas = jsonpath.jsonpath(json.loads(res + "}"), "$..sub")
      if not datas:
            yield None
      for data in datas:
            yield data
```

### 根据关键词、品牌、销量搜索商品列表

![在这里插入图片描述](https://img-blog.csdnimg.cn/5ac2adea5dc84f41a2482dbea1d79cc7.png)
具体的参数多抓几个包对比一下,很容易就分析出来了

```python
    def get_products(self, ppath, page):
      """
      获取商品列表 根据销量排序
      ppath:品牌代码
      page:翻页
      """
      headers = {
            "Accept": "*/*",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "no-cache",
            "Connection": "keep-alive",
            "Pragma": "no-cache",
            "Referer": "https://s.taobao.com/search?q=^%^E7^%^AC^%^94^%^E8^%^AE^%^B0^%^E6^%^9C^%^AC^%^E7^%^94^%^B5^%^E8^%^84^%^91&imgfile=&js=1&style=grid&stats_click=search_radio_tmall^%^3A1&initiative_id=staobaoz_20230127&tab=mall&ie=utf8&bcoffset=0&p4ppushleft=^%^2C44&cps=yes&ppath=20000^%^3A11119&sort=sale-desc&s=44",
            "Sec-Fetch-Dest": "script",
            "Sec-Fetch-Mode": "no-cors",
            "Sec-Fetch-Site": "same-origin",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
            "sec-ch-ua": "^\\^Not_A",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "^\\^Windows^^",
      }
      url = "https://s.taobao.com/search"
      params = {
            "data-key": "s",
            "data-value": page,
            "ajax": "true",
            "_ksTS": "1674837683322_2012",
            "callback": "jsonp2013",
            "q": self.word,
            "imgfile": "",
            "js": "1",
            "style": "grid",
            "stats_click": "search_radio_tmall^%^3A1",
            "initiative_id": "staobaoz_20230127",
            "tab": "mall",
            "ie": "utf8",
            "bcoffset": "0",
            "p4ppushleft": "^%^2C44",
            "cps": "yes",
            "ppath": ppath,
            "sort": "sale-desc",
            "s": ''
      }
      # 第一页的时候请求参数不一样
      if page == 1:
            params['data-value'] = '0,1'
            params['data-key'] = 's,ps'
            params['s'] = (int(page) - 1) * 44
      else:
            params['data-value'] = int(page) * 44
            params['s'] = (int(page)-1) * 44
      response = requests.get(url, headers=headers, params=params)
      return response.text
```

###滑块处理

![在这里插入图片描述](https://img-blog.csdnimg.cn/69dbabdb2f22413495afc72ede430cdc.png)
触发滑块后,搜索并定位appkey,抓到punish.js
![在这里插入图片描述](https://img-blog.csdnimg.cn/99ce4461fd594a6c93e3eeb1498274ff.png)
提取验证所需参数:
''appkey': 'X82Y__4efeef942d19c56bafab18ba3da969f4'
'token': '1c797559e58912c4ee46af4bd6371aec',
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d64124469b14008a89073b841e79542.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5420143dce674e11bbbaa2d9aaff3c18.png)
生成x5sec:"7b2277616762726964676561643b32223a223037393766353232633166646661326337346262333664616130356462383031434e434337497747454e7a746b2b7a356f493771495367454d4b447a344a4146227d"
![在这里插入图片描述](https://img-blog.csdnimg.cn/d84dcbecfb6545d1a6207d6fe5435aea.png)

### 效果

![请添加图片描述](https://img-blog.csdnimg.cn/8978250de15f4d4f820738c7bac69b20.gif)


****

<table><tr><td bgcolor=orange>本文仅供学习交流使用,如侵立删!</td></tr></table>


****

gusong125 发表于 2023-2-7 12:25

感谢大佬分享

cenjy9 发表于 2023-2-8 13:28

cyxnzb 发表于 2023-2-7 11:07

不错,感觉用途很多

cyxnzb 发表于 2023-2-7 11:08

登录与不登录爬取的结果差别大吗楼主

mine4ever001 发表于 2023-2-7 11:34

微商用到了

yixinyingX 发表于 2023-2-7 11:35

看起来很不错,但是不会用,还是谢谢分享

一场荒唐半生梦 发表于 2023-2-7 11:40

好像不登录 不可以进入第一张图片的搜索页面

FIzz001 发表于 2023-2-7 11:40

真强,感谢分享,学到了

zhongxh2010 发表于 2023-2-7 11:44

{:1_893:}内容不错

susong987 发表于 2023-2-7 11:50

这个很厉害了
页: [1] 2 3 4 5 6
查看完整版本: 【原创】淘宝关键词搜索爬取与解析