新知一下
海量新知
5 8 8 6 2 5 8

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

咸鱼学Python | 人工智能,数据爬虫 2021/10/14 23:16

正文

先来看题目描述

第一题一小题

python.requests

抓取此页面,用

lxml

解析下面的

item list

item list

展示如下

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

这不是有手就行?

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

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

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 爬虫进阶必备 | 某公司爬虫工程师机试解析第一部分(基础与 Js 逆向)

第一题二小题

python.requests

抓取此页面中的

ajax

请求(将

itemid

设为

12345678

),找到

sign

算法,并从回返结果中用正则表达式解析出多个

skuId

变量的值

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

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

要分析的就是这里的

sign

其他两个字段是传入的

itemid

还有时间戳

time

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

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

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

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

打上断点,然后单步进去就可以看到

s

的方法了

 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 算法

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 代入请求就可以了

结果如下

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

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




更多“Python”相关内容

更多“Python”相关内容

新知精选

更多新知精选