首先声明:爬虫小白,虽然爬过几个网站,但是知识几乎都是实践中获取,如果以下说的不对的,请多指正,谢谢!谨此给和我一样的小白提供一个解题思路!


目录

  • 问题背景
  • 菜鸡版解决方案
  • 大神版js加密参数获取教程指路
  • 附:excel的下载方式


问题背景

这两天在做一个爬虫项目,要求爬取页面的附件(excel)并保存,在用分析得到的request url中的k值在源代码中搜索时,幸运的定位到网页源码中隐藏了url信息,确定了爬虫方案。如下:

python requests 拿不到源码 html python获取网页源码不完整_编程语言


照原理,我可以直接用request.get(当前的url)获取网页源码,通过正则匹配得到我想要的k值,于是这是,失败的尿性来了,原因在于,我爬到的网页源码,和这段没太大区别,可偏偏k值这段不一样!

python requests 拿不到源码 html python获取网页源码不完整_python_02


然后我就很迷茫了,于是我去找度娘。

python requests 拿不到源码 html python获取网页源码不完整_原代码_03


大家的问题大多在于爬取的网页源码和审查元素得到的结果不同,也看到大家问题的解决方案基本为selenium模拟点击(我立刻pass的这个方案,用selenium避免不了要登陆,我登陆还要验证码,鄙人还没学到这块儿呢…)和模拟JS执行过程,但我的调用过程就是下面的onclick调用上面的函数。

python requests 拿不到源码 html python获取网页源码不完整_编程语言_04

菜鸡版解决方案

最后在不做完不睡觉和度娘都不帮我的绝望中,我决定研究研究,我爬到的这奇奇怪怪的k值到底和原代码里的有啥区别。(以下k值两个为一组,第二个为正确k值,第一个为我爬到的k值)

python requests 拿不到源码 html python获取网页源码不完整_编程语言_05


不难发现,正确k值由三部分组成,第一段与我爬到的k值相关,第二段为我爬到的字段ascii+11,第三段为固定值。于是只需将我爬到的k值通过简单处理就会得到正确k值,下载成功!

大神版js加密参数获取教程指路

今天刷简书的时候意外地刷到了这篇文章,反反爬虫之js加密参数获取,文章详细地讲述了从发现加密问题到追根溯源分析js代码,最终找到加密文件的过程,看完深受启发,改天一定动手试一下!

附:excel的下载方式
excel_url=‘下载链接’
ht = requests.get(excel_url,headers=header)
with open ('text.xls','wb') as f:
    f.write(ht.content)