三滑稽甲苯 发表于 2022-2-17 10:12

[Scrape Center - spa1]简单动态网页的数据爬取

本帖最后由 三滑稽甲苯 于 2022-2-17 10:12 编辑

# 网址
主站:https://scrape.center/
题目:https://spa1.scrape.center/
# 分析
老规矩,打开开发者工具的网络后刷新页面,可以看到多出来很多请求

有经验的人应该猜到了,我们要的数据应该在这两个请求内

如果看不出来,可以搜索任一电影名,也可以很快定位到正确的请求

直接在新标签页打开可以正常获取数据,说明反爬措施不是很严格,可以直接上代码

根据参数名猜测 `limit` 指的是最多返回几条数据, `offset` 指的是从哪一条开始,通过修改 url 很容易验证这一猜想
# Python 代码
```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 的步骤。

v20471188 发表于 2022-2-17 11:25

学习留念,感谢分享。

风在前,无惧 发表于 2022-2-17 13:16

适合小白{:1_921:},但是真实的情况往往更复杂,想要提升还得从源网页入手

笑逐颜凯 发表于 2022-2-17 13:27

频率高了就被封IP

我今天是大佬 发表于 2022-2-17 13:38

非常棒, 期待继续分享

kiopc 发表于 2022-2-17 15:35

这是崔某人练习的平台,建议去找一些网站去试试
页: [1]
查看完整版本: [Scrape Center - spa1]简单动态网页的数据爬取