Ajax分析与爬取实战

发布时间:2022-06-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Ajax分析与爬取实战脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

爬取目标

一个示例网站,其链接为:https://spa1.scraPE.center/ ,改示例网站的数据请求是通过Ajax完成的,页面内容是通过JavaScript渲染出来的,页面加载如下图所示:

Ajax分析与爬取实战

分析步骤

  • 分析页面数据的加载逻辑
  • 用requests实现Ajax数据的爬取
  • 将每部电影的数据分别保存到MySQL数据库

页面分析

如果我们直接通过requests.get(url)来获取页面,结果如下,可以发现返回内容并非是浏览器渲染的码,说明我们看到的整个页面都是由JavaScript和CSS文件渲染得到的,浏览器执行了HTML引用的JavaScript文件,JavaScript通过调用一些数据加载和页面渲染方法,才最终呈现了完整页面。

Ajax分析与爬取实战

Ajax分析与爬取实战

所以,打开浏览器开发者模式,点击网络模块-Xhr。重新加载页面,切换下一页时,可以发现浏览器发送了一些请求,查看相应内容,就是页面的内容数据

Ajax分析与爬取实战

代码实例

# -*- UTF-8 -*-
"""
@File:spa1_179.py
@Description:
@Author:echohye
@Date:2022/01/31 20:08
"""

import json
import pymySQL
import requests

urls = [
    f'https://spa1.scrape.center/api/movie/?limIT=10&offset={page * 10}'
    for page in range(10)
]

# 获取url对应源码
def craw(url):
    r = requests.get(url)
    return r.text


# 解析源码
def parse(html):
    obj = json.loads(html)['results']
    return obj

# 保存数据
def save_data():
    # 'id': 1,
    # 'name': '霸王别姬',
    # 'alias': 'Farewell My Concubine',
    # 'cover': 'https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896CF62472.jpg@464w_644h_1e_1c',
    # 'categories': ['剧情', '爱情'],
    # 'published_at': '1993-07-26',
    # 'minute': 171,
    # 'score': 9.5,
    # 'regions': ['中国内地', '中国香港']}
    db = pymysql.Connect(host='localhost', user='root', password='zhy123', port=3306, db='spiders')
    cursor = db.cursor()
    table_sql = "create table if not exists ajax_p179(id int not null,name vArchar(255) not null,alias VARchar(255),cover varchar(255)" 
                ",categories varchar(255), published_at varchar(255),minute varchar(255),score double,regions varchar(255))"
    cursor.execute(table_sql)
    for url in urls:
        try:
            for result in parse(craw(url)):
                sql = "insert into ajax_p179(id,name,alias,cover,categories,published_at,minute,score,regions) " 
                      f"values({result.get('id')},"{result.get('name')}","{result.get('alias')}",'{result.get('cover')}',"{result.get('categories')}"," 
                      f"'{result.get('published_at')}','{result.get('minute')}',{result.get('score')},"{result.get('regions')}")"
                cursor.execute(sql)
                db.COMmit()

        except Exception as e:
            PRint(e.args)
            db.rollback()
        print("successful")
    db.close()


if __name__ == '__main__':
    save_data()

脚本宝典总结

以上是脚本宝典为你收集整理的Ajax分析与爬取实战全部内容,希望文章能够帮你解决Ajax分析与爬取实战所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。