吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3960|回复: 10
收起左侧

[Python 转载] 《Python3网络爬虫开发实战(第二版)》案例SPA1-3代码编写

  [复制链接]
bags 发表于 2021-10-28 00:49
本帖最后由 bags 于 2021-10-28 00:54 编辑

SPA1:电影数据网站,无反爬,数据通过 Ajax 加载,页面动态渲染,适合 Ajax 分析和动态页面渲染爬取。
思路:Ajax 加载,直接抓包获取api即可
[Python] 纯文本查看 复制代码
from requests_html import HTMLSession
import json

def main():
    session = HTMLSession()
    data_all = []
    for i in range(1,3):
        try:
            url = 'https://spa1.scrape.center/api/movie/{}'.format(i)
            req = session.get(url).json()
            data_all.append(req)

        except:
            print("当前进度{}%,出错".format(i))
            with open("./爬虫练习/SPA1/error.txt","a+",encoding="utf-8") as f:
                f.write("出错页数:"+str(i))
        

                
    with open("./爬虫练习/SPA1/data.json","w",encoding="utf-8") as f:
        json.dump(data_all,f,ensure_ascii=False)




if __name__ == '__main__':
    main()




SPA2:电影数据网站,无反爬,数据通过 Ajax 加载,数据接口参数加密且有时间限制,适合动态页面渲染爬取或 JavaScript 逆向分析。
思路:简单分析发现影片详情页url和api接口均被加密

image.png

看密文格式简单分析应该是base64加密,百度解密后能得到密文
但是。。我分析的时候没有想到直接解密。。看链接中有detail,并且是ajax加载,全局搜索detail,得到几个js文件

image.png


跳转进去看到可疑的数据:key

image.png


下断点单步分析得

image.png


密文构造:”ef34#teuq0btua#(-57w1q5o5--j@98xygimlyfxs*-!i-0-mb“+电影序号id
加密方式:base64
继续分析api中另一个参数token。全局搜索token得到

image.png


跳转进去发现可疑代码,断点单步分析

image.png
image.png


分析得:赋值3个参数给数组R(链接,0,时间戳),把R转换成以”,"分隔得字符串,并进行SHA1加密

例:'/api/movie/ZWYzNCN0ZXVxMGJ0dWEjKC01N3cxcTVvNS0takA5OHh5Z2ltbHlmeHMqLSFpLTAtbWIx,0,1635352675' 加密得 :e4748aa84d9f0b6fb22e905096122d7fd3d4177f
然后把加密后得密文与时间戳重组,一样以","分隔,例:'e4748aa84d9f0b6fb22e905096122d7fd3d4177f,1635352675'
然后对该密文进行base64加密,得到token:ZTQ3NDhhYTg0ZDlmMGI2ZmIyMmU5MDUwOTYxMjJkN2ZkM2Q0MTc3ZiwxNjM1MzUyNjc1

代码:
[Python] 纯文本查看 复制代码
from requests_html import HTMLSession
import base64
import time
import hashlib
import json

def main():
    session = HTMLSession()
    data_all = []
    for i in range(1,3):
        try:
            key = "ef34#teuq0btua#(-57w1q5o5--j@98xygimlyfxs*-!i-0-mb" + str(i)
            bytes_key = key.encode("utf-8")
            token = base64.b64encode(bytes_key).decode('utf-8')
            t = int(time.time())

            key = ("/api/movie/"+token+','+"0,"+str(t)).encode("utf-8")
            key = hashlib.sha1(key).hexdigest()
            key = (key+","+str(t)).encode("utf-8")
            token_2 = base64.b64encode(key).decode('utf-8')
            
            url = "https://spa2.scrape.center/api/movie/{token}/?token={token_2}".format(token=token,token_2=token_2)
            req = session.get(url).json()
            data_all.append(req)
        except:
            pass

        with open("./爬虫练习/SPA2/data.json","w",encoding="utf-8") as f:
           json.dump(data_all,f,ensure_ascii=False)

        



if __name__ == '__main__':
    main()



SPA3:电影数据网站,无反爬,数据通过 Ajax 加载,无页码翻页,下拉至底部刷新,适合 Ajax 分析和动态页面渲染爬取。
IDA console, courier new, monospace">思路:无页码翻页,通过重组api链接即可获取全部数据
[Asm] 纯文本查看 复制代码
from requests_html import HTMLSession
import json

def main():
    session = HTMLSession()
    url = 'https://spa3.scrape.center/api/movie/?limit=100&offset=0'
    req = session.get(url).json()
    with open("./爬虫练习/SPA3/data.json","w",encoding="utf-8") as f:
           json.dump(req,f,ensure_ascii=False)
if __name__ == '__main__':
    main()

免费评分

参与人数 5吾爱币 +5 热心值 +3 收起 理由
pj2016 + 1 谢谢@Thanks!
文梦 + 1 感谢分享,学习一下
xinyangtuina + 1 + 1 谢谢@Thanks!
elevo + 1 + 1 热心回复!
chly0828 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chly0828 发表于 2021-10-28 08:16
学习了,谢谢分享!
neo_2088 发表于 2021-10-28 08:48
wqipk 发表于 2021-10-28 08:52
wangxinwei121 发表于 2021-10-28 08:53
感谢分享,学习一下!
chentest 发表于 2021-10-28 09:05
学习一下
qdzgpa 发表于 2021-10-28 09:22
感谢楼主分享,学习一下!
dayudengyu 发表于 2021-10-28 10:03
适合新手,适合新手
qzzgb12345 发表于 2021-10-28 10:13
虽然不是很懂,支持一下
angle951 发表于 2021-10-28 10:34
学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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