5.2 Ajax 数据爬取实战

目录

1. 实战内容

2、Ajax 分析

3、爬取内容

4、存入MySQL 数据库

4.1 创建相关表

4.2 数据插入表中

5、总代码与结果


1. 实战内容

        爬取Scrape | Movie的所有电影详情页的电影名、类别、时长、上映地及时间、简介、评分,并将这些内容存入MySQL数据库中。

2、Ajax 分析

        根据上一篇文章5.1 Ajax数据爬取之初介绍-CSDN博客,找到详情页的数据包,如下:

        根据数据包,会发现其中 Response中有我们想要的内容。查看其及其他页的Request URL,发现其规律,只需改变后面的数字,构造链接,即可一一爬取信息。

        Response中想要的内容如下(为Response部分内容截图):

        等等,不难发现此内容以字典的形式呈现在我们眼前。

3、爬取内容

        所以用 eval() 将字符串形式的 content 转换为字典,方便提取信息。将提取的信息汇合成字典,便于传递、存入MySQL数据库。

        在爬取的过程中,会发现一些电影数据不完整,会造成错误使得程序崩溃,所以使用try...except...去避免。

import requestsdef crawler(url):response = requests.get(url)content = response.textcontent = eval(content)name = content['name']alias = content['alias']    # 外文名categories = content['categories']cate = ','.join(categories)    # 电影种类regions = content['regions']region = ','.join(regions)    # 地点publish_time = content['published_at']score = content['score']minute = content['minute']    # 时长drama = content['drama']# print(name, alias, cate, region, publish_time, score, minute, drama)movie_dict = {'name': name,'alias': alias,'cate': cate,'region': region,'publish_time':publish_time,'minute': minute,'score': score,'drama': drama}print(movie_dict)if __name__ == '__main__':last = 100for i in range(1, last+1):url = f'https://spa1.scrape.center/api/movie/{i}/'try:crawler(url)except NameError:print(f'链接{url}数据不完整')

        以第一个详情页为例子展现输出结果:

        之后,我们可以根据结果存入MySQL数据库。

4、存入MySQL 数据库

4.1 创建相关表

        要存入数据库前,要根据字典的键创建相关表,之后才能存入表中。创建表可以在爬取数据之前创建,不需要每次循环创建一次。

        相关代码见 create_table() 函数,**mysql_local 用法见上一篇文章5.1 Ajax数据爬取之初介绍-CSDN博客 

def creat_table():conn = pymysql.connect(**mysql_local)cursor = conn.cursor()sql = ('CREATE TABLE IF NOT EXISTS movie(id INT AUTO_INCREMENT PRIMARY KEY,''name VARCHAR(100) ,''alias VARCHAR(100) ,''cate VARCHAR(100) ,''region VARCHAR(100) ,''publish_time DATE,''minute VARCHAR(100),''score VARCHAR(100),''drama TEXT)')    # 文本内容cursor.execute(sql)conn.close()

        sql语句创建表具体可见4.4 MySQL存储-CSDN博客

4.2 数据插入表中

        使用 insert_movie() 函数插入字典数据,具体解析可见4.4 MySQL存储-CSDN博客

def insert_movie(movie_dict):conn = pymysql.connect(**mysql_local)cursor = conn.cursor()keys = ','.join(movie_dict.keys())values = ','.join(['%s'] * len(movie_dict))sql = f'INSERT INTO movie({keys}) VALUES ({values})'# print(sql)# print(tuple(movie_dict.values()))cursor.execute(sql, tuple(movie_dict.values()))conn.commit()conn.close()

5、总代码与结果

import requests
import pymysql
from mysql_info import mysql_localdef creat_table():conn = pymysql.connect(**mysql_local)cursor = conn.cursor()sql = ('CREATE TABLE IF NOT EXISTS movie(id INT AUTO_INCREMENT PRIMARY KEY,''name VARCHAR(100) ,''alias VARCHAR(100) ,''cate VARCHAR(100) ,''region VARCHAR(100) ,''publish_time DATE,''minute VARCHAR(100),''score VARCHAR(100),''drama TEXT)')cursor.execute(sql)conn.close()def insert_movie(movie_dict):conn = pymysql.connect(**mysql_local)cursor = conn.cursor()keys = ','.join(movie_dict.keys())values = ','.join(['%s'] * len(movie_dict))sql = f'INSERT INTO movie({keys}) VALUES ({values})'# print(sql)# print(tuple(movie_dict.values()))cursor.execute(sql, tuple(movie_dict.values()))conn.commit()conn.close()def crawler(url):response = requests.get(url)content = response.textcontent = eval(content)# id = content['id']name = content['name']alias = content['alias']    # 外文名categories = content['categories']cate = ','.join(categories)regions = content['regions']region = ','.join(regions)publish_time = content['published_at']score = content['score']minute = content['minute']drama = content['drama']# print(name, alias, cate, region, publish_time, score, minute, drama)movie_dict = {# 'id': id,'name': name,'alias': alias,'cate': cate,'region': region,'publish_time':publish_time,'minute': minute,'score': score,'drama': drama}# print(movie_dict)insert_movie(movie_dict)if __name__ == '__main__':creat_table()last = 100for i in range(1, last+1):url = f'https://spa1.scrape.center/api/movie/{i}/'try:crawler(url)except NameError:print(f'链接{url}数据不完整')

mysql数据库部分内容:

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomlc99开源库使用

下载地址:GitHub - cktan/tomlc99: TOML C library 1.加载tomlc99库 只需要在工程当中添加toml.h / toml.c这两个文件就可以了 2.使用tomlc99库解析toml文件 以下是从文件中获取值的常用步骤: 解析 TOML 文件。遍历并找到 TOML 中的表。从表中提取值…

Linux命令:重复多次后台运行且不保存输出,查看命令对应的进程数量

要在后台重复运行 Linux 命令并查看对应的进程数量,你可以使用循环结构和后台运行符号 & 结合起来。以下是一个示例: bash for i in {1..3}; do your_command > /dev/null 2>&1 & done 命令 your_command > /dev/null 2>&…

智慧城市与数字孪生:共创未来城市新篇章

一、引言 随着科技的飞速发展,智慧城市与数字孪生已成为现代城市建设的核心议题。智慧城市注重利用先进的信息通信技术,提升城市治理水平,改善市民生活品质。而数字孪生则通过建立物理城市与数字模型之间的连接,为城市管理、规划…

SpringBoot自带的tomcat的最大连接数和最大的并发数

先说结果:springboot自带的tomcat的最大并发数是200, 最大连接数是:max-connectionsaccept-count的值 再说一下和连接数相关的几个配置: 以下都是默认值: server.tomcat.threads.min-spare10 server.tomcat.threa…

【Python笔记-设计模式】组合模式

一、说明 组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。 (一) 解决问题 处理树形结构:可以很好地处理树形结构的数据,使得用户可以统一对待单个对象和对象组合。统一接…

17.openEuler操作系统启动管理

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议安装麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 1.系统启动流程介绍 Linux系统启动流程: POST->Bios->Grub->kernel+initrd->systemd(init)->…

C++ //练习 9.12 对于接受一个容器创建其拷贝的构造函数,和接受两个迭代器创建拷贝的构造函数,解释它们的不同。

C Primer(第5版) 练习 9.12 练习 9.12 对于接受一个容器创建其拷贝的构造函数,和接受两个迭代器创建拷贝的构造函数,解释它们的不同。 环境:Linux Ubuntu(云服务器) 工具:vim 解释…

【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

Elasticsearch,作为当今最流行的开源搜索和分析引擎,以其分布式、可扩展和高可用的特性赢得了广大开发者的青睐。在Elasticsearch的分布式架构中,集群的稳健性和高可用性很大程度上依赖于其Master节点的选举机制。本文将深入剖析Elasticsearc…

Java中Date与LocalDate、LocalDateTime之间的区别及相互转换

前言 在Java开发过程中,处理日期和时间是常见的需求。随着Java 8引入了全新的日期/时间API,原有的java.util.Date类逐渐被java.time包中的LocalDate和LocalDateTime等类所替代。本文将详细阐述这三个类之间的主要区别以及它们之间的相互转换。 1. 类型…

【计算机网络】1.4 接入网和物理媒体

1.4 接入网和物理媒体 问题:怎样将端系统和边缘路由器连接? 答:有线方式(住宅接入网络、单位接入网络等)或无线方式(无线接入网络)。 有线接入方式 光纤同轴混合网是基于已有的有线电视网开发的…

python Matplotlib Tkinter-->最终框架一

3D雷达上位机实例(能够通过点击柱状图来展示3D雷达数据)2024.2.26 环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk impor…

EEA架构

概念 EEA(Electrical/Electronic Architecture)是一个综合性的概念,它涉及汽车电子电气系统的设计和整合。EEA是汽车上电气部件之间的相互关系,以及包含所有电气部件和电气系统所承载的逻辑功能的组织结构。它是系统的组织结构表…

《Docker 简易速速上手小册》第9章 Docker 与持续集成(2024 最新版)

文章目录 9.1 持续集成的基本概念9.1.1 重点基础知识9.1.2 重点案例:Python Web 应用的 CI 流程9.1.3 拓展案例 1:Python 数据分析项目的 CI9.1.4 拓展案例 2:Python 微服务的 CI/CD 9.2 Docker 在 CI/CD 中的应用9.2.1 重点基础知识9.2.2 重…

287.【华为OD机试真题】字符串序列判定(贪心算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-字符串序列判定二.解题思路三.题解代码Python题…

【重点】需求分析的每个维度和内容

1. 功能性需求 定义:功能性需求定义了系统或产品应该提供哪些核心功能和操作。 内容: 用户界面(UI):描述用户如何与系统交互,包括按钮、菜单、对话框等。用户交互(UX):描述用户与系统交互的流程,如注册、登录、搜索等。数据管理:描述系统如何存储、处理和检索数据。业…

关于使用Mxnet GPU版本运行DeepAR报错解决方案

1.引言 我们经常使用GPU来训练和部署神经网络,因为与CPU相比,它提供了更多的计算能力。在本教程中,我们将介绍如何将GPU与MXNet GluonTS一起使用。 首先,确保您的机器中至少有一个Nvidia GPU,并正确安装了CUDA以及CUDN…

C++动态链接库;C++链接库链接到C#上

1.在创建项目中选择动态链接库,如果没有可以从右侧搜索,如果还没有重新安装安装包点击修复增加相应功能 2.点击下一步,可以修改项目名称和目录位置点击创建完成项目创建 3.在新建项目内添加新的头文件(.h),…

modbus-tcp协议详解

本文参考:Modbus协议中文版【完整版】.pdf,加上自己的理解的记录,该文章主要讲modbus-TCP协议。(文档下载链接:【免费】modbus协议中文详细解释文档资源-CSDN文库) 本系列文章分为三章: 1.mod…

编程笔记 html5cssjs 086 JavaScript 内置对象

编程笔记 html5&css&js 086 JavaScript 内置对象 一、Object二、Array三、String四、Number五、Math六、Date七、RegExp八、Function九、示例小结 JavaScript 内置对象是 JavaScript 语言本身定义的一系列预定义的对象,这些对象在全局作用域中可以直接使用&…

Cubase学习:Cubase 12常用快捷键

按键盘上的上下箭头就可以让选中的音符向上或向下移动 数字0键: 停止 Ctrl+数字 0 键: 新建视图层 Alt+数字0 键: 重新设置视图层 小数点键: 播放指针回零点 数字1 键: 左定位指针 数字 2 键: 右定位指针 数字3 键--数字9键: 分别控制 3--9 的7个定位标志 Alt+数字1 键--数字9键…