Ajax案例

目标链接:https://spa1.scrape.center

python 复制代码
import requests

url = 'https://spa1.scrape.center'
html = requests.get(url).text
print(html)

运行结果如下

在HTML中我们只能在源码中看到引用了一些JS和CSS文件并没有观察到任何有关电影数据的信息,说明看到的页面是通过JS渲染得到的

一般情况下这些数据都是通过AJax来加载的,JS在后台调用这些Ajax数据接口得到数据后,再把数据进行解析并渲染呈现出来,得到最终的页面

要想获取页面,可以通过直接Ajax接口来获取数据

列表页

页面加1 offset加10

python 复制代码
import requests
import logging

logging.basicConfig(level=logging.INFO,
    format='%(asctime)s - %(levelname)s: %(message)s')

INDEX_URL='https://spa1.scrape.center/api/movie/?limit={limit}&offset={offset}'
python 复制代码
def scrape_api(url):
    logging.info('scraping %s...',url)
    try:
        response=requests.get(url)
        if response.status_code==200:
            return response.json()
        logging.error('get invalid status code %s while scraping %s',response.status_code,url)
    except requests.RequestException:
        logging.error('error occurred while scraping %s',url,exc_info=True)
python 复制代码
LIMIT=10
def scrape_index(page):
    url=INDEX_URL.format(limit=LIMIT,offset=LIMIT*(page-1))
    return scrape_api(url)

先构造一个URL,通过字符串的format的方法,传入limit和offset的值

构造好URl之后,直接调用scape_api方法并返回结果

python 复制代码
DETATL_URL='https://spa1.scrape.center/api/movie/{id}'

def scrape_detail(id):
    url=DETATL_URL.format(id=id)
    return scrape_api(url)

TOTAL_PAGE=10
def main():
    for page in range(1,TOTAL_PAGE+1):
        index_data=scrape_index(page)
        for item in index_data.get('results'):
            id=item.get('id')
            detail_data=scrape_detail(id)
            logging.info('detail data %s',detail_data)

if __name__=='__main__':
    main()

运行结果如下:

相关推荐
遂心_13 分钟前
深入理解 React Hook:useEffect 完全指南
前端·javascript·react.js
Moonbit15 分钟前
MoonBit 正式加入 WebAssembly Component Model 官方文档 !
前端·后端·编程语言
龙在天20 分钟前
ts中的函数重载
前端
卓伊凡35 分钟前
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
前端
前端Hardy36 分钟前
HTML&CSS: 谁懂啊!用代码 “擦去”图片雾气
前端·javascript·css
前端Hardy38 分钟前
HTML&CSS:好精致的导航栏
前端·javascript·css
天下无贼1 小时前
【手写组件】 Vue3 + Uniapp 手写一个高颜值日历组件(含跨月补全+今日高亮+选中状态)
前端·vue.js
我是天龙_绍1 小时前
🔹🔹🔹 vue 通信方式 eventBus
前端
一个不爱写代码的瘦子1 小时前
迭代器和生成器
前端·javascript
拳打南山敬老院1 小时前
漫谈 MCP 构建之概念篇
前端·后端·aigc