python使用requests库爬取淘宝食品信息,包含sign参数破解。

1.网站分析

参考资料:JS断点调试 https://blog.csdn.net/qq_39009348/article/details/81563831

打开淘宝页面搜索"美食"


共有一百页数据,一页100条数据
右键——检查 或者 按F12 在 NetWork 中的一大坨里找到自己想要的东西(看response里有没有自己想要的数据,想看主页面里有没有,再到XHR里看看是不是Ajiax传得,最后到JS里翻)

找到了之后就可以分析请求头里有啥了
先看看 request URL 和 request Headers

这个URL就是我们的目标了
request URL 中发现有一堆参数,那么看看下面都传了些啥参数

翻翻页发现很多值是固定不变的,一定会变或者可能会变的有下面这些值

经过观察和一些尝试(这里就不细说了)t 和 sign 的值是每次都会变的,keyword则是自己搜索的字段,page则是页数,最后面那个wangwangid则是你当前登陆的用户名(随cookies变化)
经过我的测试,根据上面的参数构造请求可以获取到数据,但是 t 和 sign 的值每次都会变,不可能我每翻一页都要自己改参数,所以只能去找这两个参数是怎么来的了,嗯 t 明显是时间戳(t = int(time.tiam()*1000)), 主要是 sign 的值
经过一番努力,我找到了这个参数怎么构造的

发现 sign 是将几个参数用"&"连接后再有MD5加密所得,然后使用js断点调试看看这几个参数都是什么意思,上面有js断点的文献,不明白的可以参考一下。


j = h(d.token + “&” + i + “&” + g + “&” + c.data)
sign: j

1. d.token


发现这个 token 与 cookies 里的 token 有点像,去看看,发现

就是这个了,这里要注意 这个 token 的大概每隔一个小时就会改变一次

2. i


这个 i 的值和之前 t 的值一样 ,int(就是 time.time()*1000)

3. g


不难发现 g 就是之前请求里的一个固定值 appKey : 12574478

4. c.data


就是之前请求的参数里的 data

所有 sign = md5(d.token + “&” + i + “&” + g + “&” + c.data) 这种形式
下面上代码

import requests
from pymongo import MongoClient
from urllib.parse import urlencode
import re
import hashlib
import time
from requests.exceptions import RequestExceptionconn = MongoClient('127.0.0.1', 27017) # 连接 mongodb
db = conn.taobao  # 连接taobao数据库,没有则自动创建
my_set = db.meishi # 连接meishi表,没有则自动创建# 获取请求需要的信息
def get_request_headers(page, keyword):page = str(page)referer = 'https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&clk1=099d87ed80b8f8' \'19245aee821810d220&keyword=%E7%BE%8E%E9%A3%9F&page=0'headers = {'Connection': 'close','referer': referer,'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36','cookie': 'cna=X+rWFGryzTMCAUExRJnWSOSi; enc=nsDkgllsoBPb0wIc0Q8sA4xK0DSWUGILWESmQjTZ0N5v9rvesE96OKtukWmMQNlvKtXJmzc1TT6VuFqddpQepw%3D%3D; hng=US%7Czh-CN%7CUSD%7C840; t=45d44be7431b1beb974ab74f954b16db; tg=0; thw=cn; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; l=bBMEN2egvsEedSQ-BOfZhurza77t1IRb4sPzaNbMiICP9wfp7rr1WZwXnMT9C3GVw1WeR3-QiNZbBeYBq6C..; _fbp=fb.1.1549863216405.2066565933; uc3=vt3=F8dByE0JQHSmXHF%2BSgM%3D&id2=UNDXmQXXFncoVA%3D%3D&nk2=EFtb3MsoNHDb&lg2=U%2BGCWk%2F75gdr5Q%3D%3D; tracknick=semir%5Cu7D2B%5Cu98CE; lgc=semir%5Cu7D2B%5Cu98CE; _cc_=VFC%2FuZ9ajQ%3D%3D; UM_distinctid=168db3b076d3e9-045df96dd398bd-57b153d-144000-168db3b076e230; mt=ci=-1_0; ctoken=6MWCnVa6pQyqEUr_CqYD5DdN; cookie2=5721f26ad532d929eb75be4146fad480; v=0; _tb_token_=874387eb3d5e; _m_h5_tk=3d843a5726d1c5fae79b96e5527fc27d_1552153109599; _m_h5_tk_enc=f5d23cea9652db72aca2d2f2f2005493; uc1=cookie14=UoTZ5iTLQWRGag%3D%3D; isg=BGtrP22cszE6X-82z0jp7ZRA-o9fUH4m1DAO393oR6oBfIveZVAPUgne1vy33Nf6'}data = '{"keyword":"%s","ppath":"","loc":"","minPrice":"","maxPrice":"","ismall":"","ship":"","itemAss' \'urance":"","exchange7":"","custAssurance":"","b":"","clk1":"099d87ed80b8f819245aee821810d220","p' \'voff":"","pageSize":"100","page":"%s","elemtid":"1","refpid":"mm_26632258_3504122_32538762","pid' \'":"430673_1006","featureNames":"spGoldMedal,dsrDescribe,dsrDescribeGap,dsrService,dsrServiceGap' \',dsrDeliver, dsrDeliverGap","ac":"X+rWFGryzTMCAUExRJnWSOSi","wangwangid":"' \'semir\\\\u7D2B\\\\u98CE","catId":""}' % (keyword, page)t = int(time.time()*1000)t = str(t)  # 要转化成字符串token = "3d843a5726d1c5fae79b96e5527fc27d"appkey = "12574478"datas = token+'&'+t+'&'+appkey+'&'+datasign = hashlib.md5()  # 创建md5对象sign.update(datas.encode())  # 使用md5加密要先编码,不然会报错,我这默认编码是utf-8signs = sign.hexdigest()   # 加密data1 = {"jsv": "2.4.0","appKey": "12574478","t": t,  # 上面的t"sign": signs,  # 加密之后的值"api": "mtop.alimama.union.sem.landing.pc.items","v": "1.0","AntiCreep": "true","dataType": "jsonp","type": "jsonp","ecode": "0","callback": "mtopjsonp1","data": {"keyword": keyword,  # 关键词别忘了"ppath": "","loc": "","minPrice": "","maxPrice": "","ismall": "","ship": "","itemAssurance": "","exchange7": "","custAssurance": "","b": "","clk1": "099d87ed80b8f819245aee821810d220","pvoff": "","pageSize": "100","page": page,      # 页码"elemtid": "1","refpid": "mm_26632258_3504122_32538762","pid": "430673_1006","featureNames": "spGoldMedal,dsrDescribe,dsrDescribeGap,dsrService,dsrServiceGap,dsrDeliver,2020dsrDeliverGap",  # 2020这里是一个空格"ac": "X+rWFGryzTMCAUExRJnWSOSi","wangwangid": "semir\\u7D2B\\u98CE","catId": "",}}# 返回请求头和要传的参数return headers, data1def get_data(url, headers):try:response = requests.get(url, headers=headers)print(response.url)if response.status_code == 200:return response.textelse:return Noneexcept RequestException as E:print(E)return Nonedef parse_data(data):# 使用正则表达式解析数据,经测试其他类型商品数据结构是一样的,这个也能用pattern = re.compile('{"dsrDeliver":"(.*?)".*?dsrDescribe":"(.*?)".*?dsrService":"(.*?)".*?eurl":"(.*?)".*?'+ 'imgUrl":"(.*?)".*?loc":"(.*?)".*?promoPrice":"(.*?)".*?redkeys":\[(.*?)\].*?title":"(.*?)"'+ '.*?wangwangId":"(.*?)"}', re.S)datalist = re.findall(pattern, data)return datalistdef main():keyword = "美食"  # 设置关键词for i in range(1, 101):   # 循环一百页time.sleep(5)   # 睡5s,降低频率,防止被搞page = iheaders, data1 = get_request_headers(page, keyword)data1 = urlencode(data1)  # 将要传输的数据编码 ,这里有个坑,有一个空格编码不出来,只能想换成2020再替换回来data1 = re.sub('\+', '', data1)data1 = data1.replace('2020', '%20')data1 = data1.replace('%27', '%22')base_url = 'https://h5api.m.taobao.com/h5/mtop.alimama.union.sem.landing.pc.items/1.0/?' + data1  #可以用这个完整的url 和页面上的比较,看一不一样,一样就可以了datas = get_data(base_url, headers)if datas is None or datas == []:print(page)continuevallist = parse_data(datas)if vallist == []:print(page)continueprint(len(vallist))for s in vallist:data = {'title': s[8],'img': s[4],'price': s[6],'xiangxixinxi': s[3],'area': s[5],'fenlei': s[7],'dianpu': s[9],'fahuosudu': s[0],'shangpinmiaosu': s[1],'fuwutaidu': s[2],}print(data)my_set.insert(data)  # 插入数据if __name__ == '__main__':main()

最后贴下结果

python使用requests库爬取淘宝食品信息,包含sign参数破解相关推荐

  1. python使用requests库爬取淘宝指定商品信息

    python使用requests库爬取淘宝指定商品信息 在搜索栏中输入商品 通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内 解析u ...

  2. python爬虫——用selenium爬取淘宝商品信息

    python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...

  3. 江湖小白之一起学Python (五)爬取淘宝商品信息

    趁热需打铁,随着这几天的鸡血澎湃,我们来实现一下爬取淘宝商品信息,我记得几年前曾用python写了下抓取淘宝天猫,京东,拍拍的爬虫,专门采集商品信息,图片,评论及评论图片,我还用pyqt开发了个客户端 ...

  4. python爬虫学习(三):使用re库爬取淘宝商品,并把结果写进txt文件

    第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字"python",然后搜索,显示如下搜索结果 从url连接中可以得 ...

  5. Python爬虫学习之爬取淘宝搜索图片

    Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...

  6. Python爬取淘宝商品信息保存到Excel

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  7. python+scrapy简单爬取淘宝商品信息

    python结合scrapy爬取淘宝商品信息 一.功能说明: 已实现功能: 通过scrapy接入selenium获取淘宝关键字搜索内容下的商品信息. 待扩展功能: 爬取商品中的全部其他商品信息. 二. ...

  8. 使用python爬取淘宝商品信息

    使用python爬虫爬取淘宝商品信息 使用的模块主要有 selenium ,time , re, from selenium import webdriver import time import c ...

  9. 利用Selenium爬取淘宝商品信息

    文章来源:公众号-智能化IT系统. 一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样. ...

  10. 2021-11-16爬取淘宝商品信息时如何获取cookie

    爬取淘宝商品信息时如何获取cookie ###一.基本环境 1.win10系统 2.火狐浏览器 3.编程软件anaconda 4.淘宝的robots:https://www.taobao.com/ro ...

最新文章

  1. 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换
  2. C#编程语言之获取文件编码格式(转载)
  3. Android Loader机制全面详解及源码浅析
  4. 丑憨批的爬虫笔记2(爬虫引发的问题+robots协议)
  5. 一个简单的桌面应用程序框架示例(Java SE9)
  6. .net5+nacos+ocelot 配置中心和服务发现实现
  7. mac上python3安装HTMLTestRunner
  8. tornado+websocket+mongodb实现在线视屏文字聊天
  9. 【内核】进程切换 switch_to 与 __switch_to
  10. 【控制】《自动控制原理》胡寿松老师-第8章-非线性控制系统分析
  11. linux wine qq2017,20170506-linux下最新WineQQ8.9.1安装教程
  12. 慕课PDF下载扩展--再也不用担心慕课不给PDF了
  13. d3js精通教程_d3js从基础到精通第二部分
  14. linux视频补帧,SVP补帧软件最新版-SVP补帧软件免费版-QQ下载站
  15. 2022年编程语言排名,官方数据来了,让人大开眼界
  16. f检验matlab计算,方差分析F检验的步骤和判定
  17. 10个热门大数据发展趋势
  18. uiautomatorviewer 定位提示Error obtaining UI hierarchy
  19. 用汉字能给计算机编程,为什么中国的程序员不能用中文来编程?
  20. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

热门文章

  1. 你好!编程!你好!世界
  2. rstudio导入txt文件_R语言 | 读写txt、csv、excel文件
  3. 运用集合实现用户的注册和登录
  4. Power bi_商品销售案例分析
  5. 利用Google博客搜索查看加密QQ空间(qzone)日志
  6. unexpected inconstancy
  7. 2020-05-05
  8. 硬盘格式化怎么操作 硬盘格式化后数据还在吗
  9. Linux硬盘格式化
  10. 怎么调整计算机的音量,笔记本音量怎么调_如何调整笔记本电脑的音量-win7之家...