一次令人愉悦的爬虫修补过程

自从爬虫和秒杀做完之后就开始踌躇满志的帮朋友买口罩了,然而悲伤的是搜出来的好货点开就是不在该区域销售,难道我们十位数俱乐部就不配防护么QAQ,然后懒得一个一个开了,打算搞一个京东检测有没有货的补丁,我们技术流(伪),嗯?是不是?能让电脑干的为什么要自己干?

原本的思路是smzdm的链接检测到如果是狗东就打开然后看看关键字,结果写的过程中遇到两个问题,1张大妈是跳转链接,还不是重定向,是用代码开的,2狗东的地址选项是ajax的,也就是requests不能直接提交。

于是机智(伪)的我,打印出张大妈跳转的那段代码跟狗东对比了一下,发现页面里有个关键字就是狗东的物品id,用正则提出来就行,其余不用管它怎么跳。地址选项嘛其实也很简单,ajax也是要接收数据的,接收的数据一般都是json,比检查代码还简单,也挖出来查看库存的地址是stockXXX,提交关键字给这个链接然后直接读库存的内容就行,于是就这么做了,但是发现查库存不止需要物品ID和地址ID,还要两个不知道干嘛的参数,一个估计是物品选项,还有一个猜不出

挠了半天头跳不掉这两个未知参数,差点想放弃重新用selenium,但是selenium又实在慢而且我只是查一下库存而已感觉太大了,聪慧(伪)的我又想起参数怎么也是要提交的,不如看看狗东的页面,结果!果然页面有,而且就直接列出来的(参数名一样),感恩,狗东还是我兄弟。

结果就可以直接在标题看有没有货啦,愉悦的奖励自己一瓶可乐(最后一瓶),可是确实都没有货呢QAQ

查库存的代码附后

def jdstock(url):  # 京东有没有库存
    reszmd = requests.get(url, headers=headers)
    jdid = re.search('(?<=2F)\d+', reszmd.text).group(0)  # 提取物品ID
    jdurl = 'https://item.jd.com/' + jdid + '.html'
    vnc = requests.get(jdurl, headers=headers)
    venderID = re.search('(?<=venderId:)\d+', vnc.text).group(0)  # 未知参数一
    cat = re.search('(?<=cat: \[)\d+,\d+,\d+', vnc.text).group(0)  # 未知参数二
    jdstockurl = 'https://c0.3.cn/stock?skuId=' + jdid + '&area=地区ID&venderId=' + venderID + '&buyNum=1&choseSuitSkuIds=&cat=' + cat
    jdstock = requests.get(jdstockurl, headers=headers)
    areajson = json.loads(jdstock.text)
    areaisok = areajson['stock']['StockStateName']  # 库存状况
    return areaisok