Ajax分析与爬取实战
爬取目标
一个示例网站,其链接为:https://spa1.scrape.center/ ,改示例网站的数据请求是通过Ajax完成的,页面内容是通过JavaScript渲染出来的,页面加载如下图所示:
分析步骤
- 分析页面数据的加载逻辑
- 用requests实现Ajax数据的爬取
- 将每部电影的数据分别保存到MySQL数据库中
页面分析
如果我们直接通过requests.get(url)来获取页面,结果如下,可以发现返回内容并非是浏览器渲染的源码,说明我们看到的整个页面都是由JavaScript和CSS文件渲染得到的,浏览器执行了HTML引用的JavaScript文件,JavaScript通过调用一些数据加载和页面渲染方法,才最终呈现了完整页面。
所以,打开浏览器开发者模式,点击网络模块-XHR。重新加载页面,切换下一页时,可以发现浏览器发送了一些请求,查看相应内容,就是页面的内容数据
代码实例
# -*- 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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!