当前位置:   article > 正文

爬取全国大学排名--数据保存在js文件中的处理办法

爬取全国大学排名--数据保存在js文件中的处理办法

网页链接【软科排名】2023年最新软科中国大学排名|中国最好大学排名

点击xhr后发现数据不存在,在搜索框(尽量搜索数字和字母)搜索,发现数据在js文件中,这是一个JSONP的格式,相对于json的格式

 

 

对js文件进行分析, 它定义了一个函数__NUXT_JSONP__,控制台中复制,发现其为一个函数,点击进入另一个js文件

在re处打上断点,刷新网站,继续执行脚本得到

 

此时的t

代码操作:

  1. import execjs
  2. import requests
  3. import re
  4. url = "https://www.shanghairanking.cn/_nuxt/static/1706099724/rankings/bcur/2023/payload.js"
  5. response = requests.get(url=url).text
  6. data = re.findall('__NUXT_JSONP__\("/rankings/bcur/2023",(.*?)\);',response)[0]
  7. result = execjs.eval(data)
  8. univData = result['data'][0]['univData']
  9. i = 1
  10. for univ in univData:
  11. univNameCn = univ['univNameCn']
  12. univNameEn = univ['univNameEn']
  13. univTags = '/'.join(univ['univTags'])
  14. province = univ['province']
  15. univCategory = univ['univCategory']
  16. score = univ['score']
  17. print(i,univNameCn,univNameEn,univTags,province,univCategory,score)
  18. i+=1

 execjs.eval()和call方法的区别如下:

功能:

execjs.eval():用于执行一段JavaScript代码并返回结果。
call方法:通常用于调用JavaScript对象的方法或函数。
用法:

execjs.eval():接受一个JavaScript代码作为参数,并返回执行结果。
call方法:作为JavaScript对象的一个方法,用于调用该对象的方法或函数。通常需要指定调用的方法名,并传递相应的参数。
适用场景:

execjs.eval():适用于在Python中执行JavaScript代码,例如需要动态执行一些JavaScript逻辑或计算。
call方法:适用于在JavaScript中调用对象的方法或函数,例如调用一个对象的成员方法来完成某项操作。
总的来说,execjs.eval()主要用于在Python中执行JavaScript代码,而call方法用于JavaScript对象内部的方法调用。它们在功能和用法上有所不同,根据具体的需求选择合适的方法。

JSONP(JSON with Padding)是一种在网页端通过动态创建 <script> 标签实现跨域请求的方法。由于浏览器的同源策略限制了通过 XMLHttpRequest 对象进行跨域请求,JSONP 就应运而生,它允许从不同域的服务器上请求数据,实现了跨域访问。

JSONP 的原理是利用 <script> 标签没有跨域限制的特点,动态创建一个 <script> 标签,其 src 属性指向目标服务器上的一个接受回调函数参数的 URL。目标服务器在接收到请求后,会将数据包装在一个函数调用中返回,该函数即为前端事先定义好的回调函数。因为返回的是 JavaScript 代码,而不是 JSON 数据,所以可以绕过同源策略的限制。最终,数据会作为参数传递给前端定义的回调函数,从而实现了跨域数据的获取和处理。

JSONP 回调函数就是在 JSONP 请求中定义的用于处理返回数据的 JavaScript 函数。通常情况下,JSONP 请求的 URL 中会有一个参数用来指定回调函数的名称,例如 callback=handleResponse,那么目标服务器在返回数据时,会将数据包装在 handleResponse 函数中,以便在前端接收到响应后调用该函数来处理数据。

 

结果展现:

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/228986
推荐阅读
相关标签
  

闽ICP备14008679号