前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 爬虫进阶必备 | 某公司爬虫工程师机试解析第一部分(基础与 Js 逆向)

Python 爬虫进阶必备 | 某公司爬虫工程师机试解析第一部分(基础与 Js 逆向)

作者头像
咸鱼学Python
发布2021-10-28 15:53:22
4210
发布2021-10-28 15:53:22
举报
文章被收录于专栏:咸鱼学Python

前奏

这个例子来自匿名的群友投稿

站点网址就不 po 了(主要怕你们把人家机试网站干崩了)

本文为某公司一面机试第一题,题目比较简单,有手就行

第二题下次发

正文

先来看题目描述

第一题一小题

python.requests抓取此页面,用lxml解析下面的item list

item list 展示如下

“这不是有手就行?

像这样简单的机试题,除了考察你的基础之外,还有你的编码规范

控制台打开抓包,复制 xpath 直接请求就完事了

代码语言:javascript
复制
def getItemList():
    resp = requests.get("http://xxxx.com/xxxx/index.html")
    resp.encoding = resp.apparent_encoding
    html = etree.HTML(resp.text)
    item_list = html.xpath('/html/body/div[1]/li/text()')
    # 解析结果
    print("第一题第一小题的 item list 结果: ", item_list)
    # print(resp.text)


if __name__ == '__main__':
    getItemList()

结果如下

第一题二小题

python.requests抓取此页面中的ajax请求(将itemid设为12345678),找到sign算法,并从回返结果中用正则表达式解析出多个skuId变量的值

根据上面的要求先找到对应的 ajax 请求,我感觉这一步老鱼友们都是一把梭

要分析的就是这里的sign

其他两个字段是传入的itemid还有时间戳time

直接通过调用栈就可以找到位置了

所以接下来就是常规操作了

打上断点,然后单步进去就可以看到s的方法了

代码语言:javascript
复制
 function s(x, y) {
        var ss = x + 'easy' + y;
        var r = [];
        for(var i=0;i<ss.length;i++) {
            r.push(String.fromCharCode(ss.charCodeAt(i) + 5));
        }
        return r.join('');
    }

接下来就是基本操作,可以直接改写成 Python 也可以直接用execjs调用,完事~

sign 算法

代码语言:javascript
复制
def get_sign(time1, itemid):
    str1 = str(itemid) + 'easy' + str(time1)
    sign = ''
    for str_ in str1:
        sign = sign + chr(ord(str_) + 5)
    return sign

然后将这个 sign 代入请求就可以了

结果如下

以上就是第一题的全部答案了,总的来说的第一小部分是送分题,第二小部分考察了简单的 js 逆向分析,大家应该都可以轻松解决

第二题是 app 加密参数的分析留着下一篇写,这样可以骗两次阅读~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 咸鱼学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前奏
  • 正文
    • 第一题一小题
      • 第一题二小题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档