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()

运行结果如下:

相关推荐
黄交大彭于晏34 分钟前
UniApp 全局通知功能实现
前端·vue.js·uni-app
sTone8737539 分钟前
Android核心概念(一)minSdkVersion targetSdkVersion compileSdkVersion
android·前端
林太白1 小时前
八大数据结构
前端·后端·算法
一 乐1 小时前
流浪动物救助|流浪猫狗救助|基于Springboot+vue的流浪猫狗救助平台设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设
火星数据-Tina1 小时前
Python + WebSocket 实现实时体育比分系统(含数据库设计与前端演示)
开发语言·前端
国思RDIF框架1 小时前
国思RDIF低代码快速开发框架 v6.2.2版本发布
前端·vue.js·后端
oil欧哟1 小时前
Agent 设计与上下文工程- 02 Workflow 设计模式(上)
前端·网络·人工智能
StarkCoder1 小时前
GetX 状态管理优化:从 GetBuilder 到 Obx 的性能提升实践
前端
小高0071 小时前
深入理解 package.json:前端项目的 "身份证"
前端·javascript·vue.js
StarkCoder1 小时前
Flutter ListView 数据变动导致的卡顿与跳动问题:Key 的妙用
前端