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

运行结果如下:

相关推荐
前端炒粉39 分钟前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
巧克力芋泥包2 小时前
前端使用阿里云图形验证码;并且与安卓进行交互
android·前端·阿里云
G***E3163 小时前
前端GraphQLAPI
前端
lumi.3 小时前
Vue + Element Plus 实现AI文档解析与问答功能(含详细注释+核心逻辑解析)
前端·javascript·vue.js·人工智能
z***I3943 小时前
VueGraphQLAPI
前端
S***t7144 小时前
Vue面试经验
javascript·vue.js·面试
粉末的沉淀5 小时前
css:制作带边框的气泡框
前端·javascript·css
p***h6436 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js
N***73856 小时前
Vue网络编程详解
前端·javascript·vue.js
e***71676 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端