js 爬虫抓取网页数据(网页端抓数据免不了要跟JavaScript打交道,尤其是JS代码有混淆 )

优采云 发布时间: 2021-11-09 23:08

  js 爬虫抓取网页数据(网页端抓数据免不了要跟JavaScript打交道,尤其是JS代码有混淆

)

  在web端抓取数据时,不可避免地要处理JavaScript,尤其是JS代码混乱,cookie被操纵的情况下。需要一段时间才能找到生成 cookie 的地方。

  那天遇到了这样的网页,用浏览器打开也是正常的。但是,在下载带有请求的 URL 时,我得到了“521”的状态码,返回的内容是一串压缩和混淆的 JavaScript 代码。它看起来像这样:

  

  很容易说返回了 JavaScript。浏览器运行此 JavaScript 后,必须重新加载它才能获取真实的 Web 内容。

  那么问题来了,这段js代码是做什么的呢?

  我们先观察浏览器的加载过程。由于您已成功打开此网页,并且您的浏览器已记住了一些关键 cookie,因此您必须先删除这些 cookie。

  如何删除Chrome浏览器记录的某个网站 cookie?

  打开 Chrome 的设置,按照这个路径找到删除 cookie 的地方:高级 -> 内容设置 -> Cookies -> 查看所有 cookie 和站点数据。

  然后在右上角的搜索栏中搜索,看到这个网站对应的cookies,直接删除即可。

  打开浏览器的网络,选择“保留日志”,记住加载历史,然后用浏览器重新打开网站:

  可以看到Network记录的加载过程:

  

  观察发现第一次返回521,然后暂停了一段时间(实际上1. 5秒,后面可以看到js代码)重新加载网页,可以得到正确的网页内容。

  比较两次请求的cookies,可以发现第二次的cookies比较多。这些cookies可能是写在521返回的js中,接下来我们研究一下这段js代码。

  首先,我们需要一个js格式化工具来帮助我们研究这段js代码。我们使用的工具有很多。复制代码到beautifier的网页并格式化:

  

  我们先来了解一下这段代码。第 1-16 行没什么特别的。16行需要eval()一段js代码字符串,这个很重要,看看是什么。将eval改为console.log,然后按F12调出Chrome的开发者工具,将所有js代码复制到Chrome的Console并运行:

  

  这时候我们可以看到控制台输出了一段js代码,把这段代码复制到美化网页中,格式化:

  

  正如您在第 4 行中看到的,document.cookie 被分配了一个值,该值是写入浏览器的名为 __jsl_clearance 的 cookie。这个cookie的生成与第4行末尾的函数有关。看代码,是另一种加密算法。

  我们可以理解这个函数的实现,并使用Python来实现算法,但实际上这段代码太难理解了。我们可以使用 Python 的 ExecJS、PyV8 等模块来运行这个 js 并获取 cookie 值。

  有了cookie值,我们就可以使用Python中的requests.Session来加载这个网页了。在 Python 中获取 cookie 并正确加载网页内容是对您 Python 能力的考验。遇到问题可以留言讨论。

  经常有读者在公众号留言与我交流。多次留言很麻烦。在这里,我在微信上开了10个朋友圈。可以在微信上和我交流。只有前10位朋友可以申请。

  

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线