鱼C论坛

 找回密码
 立即注册
查看: 4797|回复: 6

爬虫在运行中怎么运行js代码?

[复制链接]
发表于 2017-10-25 17:51:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
尝试爬去天猫的一个信息,然后发现传入的url构成中有2个参数是需要从cookie中提取的
提取的方式写在了一个js函数中,(基本js小白,大约能看懂基本语法,约等于0)

问题来了,怎么先运行这个js获取要的信息,然后再运行爬虫?

或者,我这个思路不对?并不需要运行JS?

下面这段就是网页中的js代码,我要爬的链接需要isg和isg2两个参数,目测就是靠这个JS来生成的,求思路

  1. <script>
  2.     (function(w,d){
  3.     try{
  4.         var l,url='//mdskip.taobao.com/core/initItemDetail.htm?sellerPreview=false&household=false&itemId=555299818582&isForbidBuyItem=false&tmallBuySupport=true&cartEnable=false&cachedTimestamp=1508919956754&isSecKill=false&addressLevel=3&isPurchaseMallPage=false&tryBeforeBuy=false&isUseInventoryCenter=true&isRegionLevel=false&offlineShop=false&isAreaSell=false&isApparel=true&showShopProm=false&service3C=false&queryMemberRight=false',isg=document.cookie.match('(^|;) ?l=([^;]*)(;|$)'),isg2 =document.cookie.match('(^|;) ?isg=([^;]*)(;|$)');
  5.         if(!url){return;}
  6.         var arr=["callback=setMdskip","timestamp="+(+new Date()),"isg="+(isg&&isg[2]),"isg2="+(isg2&&isg2[2])],reg=/[?&^](ip|campaignId|key|abt|cat_id|q|u_channel|areaId)=([^&]+)/g,params=w.location.search;
  7.         while(r=reg.exec(params)){arr.push(r[1]+"="+r[2]);}
  8.         d.referrer && (arr.push("ref="+encodeURIComponent(d.referrer)));
  9.         w.onMdskip=function(c){l=l?c(l):c}
  10.         w.setMdskip=function(v){l=l?l(v):v;}
  11.         try{
  12.             var head=d.head || d.getElementsByTagName("head")[0];
  13.             var script=d.createElement("script");
  14.             head.insertBefore(script,head.firstChild);
  15.             script.src=url+'&'+arr.join("&");
  16.         }
  17.         catch(err){
  18.             d.write('<script src="'+url+'&'+arr.join("&")+'" async="async"></'+'script>');
  19.         }
  20.     }catch(e){
  21.         w.onMdskip=null;
  22.         setTimeout(function(){throw err;},0);
  23.     }
  24.     }(window,document))
  25. </script>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-25 18:09:09 | 显示全部楼层
  1. var arr=["callback=setMdskip","timestamp="+(+new Date()),"isg="+(isg&&isg[2]),"isg2="+(isg2&&isg2[2])]
复制代码


这一段代码到底是怎么分解的?
我看都看不懂这个arr到底是个什么列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 15:12:04 | 显示全部楼层
gopythoner 发表于 2017-10-25 18:09
这一段代码到底是怎么分解的?
我看都看不懂这个arr到底是个什么列表

这个应该是定义了一个变量arr,等号后面的就是一个列表。这个实际就是想到与python里的arr=["callback=setMdskip","timestamp="+(+new Date()),"isg="+(isg&&isg[2]),"isg2="+(isg2&&isg2[2])]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 17:15:14 | 显示全部楼层
colinshi 发表于 2017-10-26 15:12
这个应该是定义了一个变量arr,等号后面的就是一个列表。这个实际就是想到与python里的arr=["callback=se ...

JavaScript的代码真乱,写成一行的没法看,这个分行的都看不懂
我只知道URL中的isg和isg2是通过cookie中提取的,提取之后还转换了,这个js中我怎么没有看出来转换的过程?

你能看出来么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 17:25:49 | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-10-26 17:39 编辑
gopythoner 发表于 2017-10-26 17:15
JavaScript的代码真乱,写成一行的没法看,这个分行的都看不懂
我只知道URL中的isg和isg2是通过cookie中 ...


你去装个pyv8好了,可以直接执行js代码,这样你就可以直接运算出结果了,也不用你看懂js代码,只要知道运算结果就行。
https://code.google.com/archive/p/pyv8/

另外一个js2py也是可以用的
https://github.com/PiotrDabkowski/Js2Py

  1. Simple Example:

  2.     >>> import js2py
  3.     >>> js2py.eval_js('console.log( "Hello World!" )')
  4.     'Hello World!'
  5.     >>> add = js2py.eval_js('function add(a, b) {return a + b}')
  6.     >>> add(1, 2) + 3
  7.     6
  8.     >>> add.constructor
  9.     function Function() { [python code] }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 21:04:22 | 显示全部楼层
楼上的思路是完全正确。不用你看懂JS。除了楼上说的两个还有一些其他也可以做到。你可以搜索以下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-27 17:31:01 | 显示全部楼层
jerryxjr1220 发表于 2017-10-26 17:25
你去装个pyv8好了,可以直接执行js代码,这样你就可以直接运算出结果了,也不用你看懂js代码,只要知道 ...

其实我是知道Python有执行js的库,我也想过用

但是这个不行,因为这个函数大部分的变量都是从网页中获取的,也就是说如果直接运行的话是不可行的

现在爬虫越来越来搞了,js是个必须懂的啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-25 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表