本帖最后由 三滑稽甲苯 于 2022-2-17 10:12 编辑
网址
主站:https://scrape.center/
题目:https://spa1.scrape.center/
分析
老规矩,打开开发者工具的网络后刷新页面,可以看到多出来很多请求
有经验的人应该猜到了,我们要的数据应该在这两个请求内
如果看不出来,可以搜索任一电影名,也可以很快定位到正确的请求
直接在新标签页打开可以正常获取数据,说明反爬措施不是很严格,可以直接上代码
根据参数名猜测 limit 指的是最多返回几条数据, offset 指的是从哪一条开始,通过修改 url 很容易验证这一猜想
Python 代码
from requests import Session
from time import time
def show(movies: list):
for movie in movies:
print(f"{movie['name']} - {movie['alias']}")
print(" Score:", movie["score"])
print(" Tags:", *movie["categories"])
print(" Regions:", *movie["regions"])
print(f' Duration: {movie["minute"]} min')
print(" Release date:", movie["published_at"])
print(" Link:", f"https://spa1.scrape.center/detail/{movie['id']}")
print()
if __name__ == '__main__':
start = time()
x = Session()
LIMIT = 10 # 每次最多获取10条数据
URL = "https://spa1.scrape.center/api/movie/?limit={}&offset={}"
r = x.get(URL.format(1, 0))
TOTAL = r.json()["count"]
now = 0
while now < TOTAL:
r = x.get(URL.format(LIMIT, now))
show(r.json()["results"])
now += LIMIT
end = time()
input(f'Time used: {end - start} s.')
效果图
结语
我们没必要害怕动态加载的网页。如果没有反爬,它甚至会比静态网页更容易爬取,因为接口返回的数据就是我们想要的,可以省去解析 html 的步骤。
|