当前位置: 首页 > news >正文

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数据库部分内容:

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

相关文章:

5.2 Ajax 数据爬取实战

目录 1. 实战内容 2、Ajax 分析 3、爬取内容 4、存入MySQL 数据库 4.1 创建相关表 4.2 数据插入表中 5、总代码与结果 1. 实战内容 爬取Scrape | Movie的所有电影详情页的电影名、类别、时长、上映地及时间、简介、评分,并将这些内容存入MySQL数据库中。 2、…...

276.【华为OD机试真题】矩阵匹配(二分法—JavaPythonC++JS实现)

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

java——多线程基础

目录 线程的概述多线程的创建方式一:继承Thread类方式二:实现Runnable接口方式三:利用Callable接口、FutureTask类来实现。Thread常用的方法 线程安全问题线程安全问题概述线程安全问题案例取钱案例描述模拟代码如下:执行结果 线程…...

Python服务器监测测试策略与工具:确保应用的高可用性!

在构建高可用性的应用程序时,服务器监测测试是至关重要的一环。Python作为一种强大的编程语言,提供了丰富的工具和库来帮助我们进行服务器监测测试。本文将介绍一些关键的策略和工具,帮助你确保应用的高可用性。 1. 监测策略的制定&#xff…...

Spring Security源码学习

Spring Security本质是一个过滤器链 过滤器链本质是责任链设计模型 1. HttpSecurity 【第五篇】深入理解HttpSecurity的设计-腾讯云开发者社区-腾讯云 在以前spring security也是采用xml配置的方式&#xff0c;在<http>标签中配置http请求相关的配置&#xff0c;如用户…...

大数据面试总结三

1、hdfs作为分布式存储系统&#xff0c;底层的实现的方式&#xff08;可能不正确&#xff09; 1、底层是一个分布式存储的&#xff0c;底层会将数据进行切分多个block块&#xff08;128M&#xff09;&#xff0c;并存储在不同的节点上面&#xff0c;这种分布式方式有助于提高数…...

AI赚钱套路总结和教程

最近李一舟和Sora 很火&#xff0c;作为第一批使用Sora赚钱的男人&#xff0c;一个清华学美术的跟人讲AI&#xff0c;信的人太多了&#xff0c;钱太好赚了。3年时间&#xff0c;李一舟仅通过卖课就赚了1.75亿元&#xff0c;其中《每个人的人工智能课》收入2786万元&#xff0c;…...

Linux安装jdk、tomcat、MySQL离线安装与启动

一、JDK和Tomcat的安装 1.JDK安装 直接上传到Linux服务器的&#xff0c;上传jdk、tomcat安装包 解压JDK安装包 //解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 置环境变量(JAVA_HOME和PATH) vim /etc/profile 在文件末尾添加以下内容&#xff1a; //java environment expo…...

Python爬虫-使用代理伪装IP

爬虫系列&#xff1a;http://t.csdnimg.cn/WfCSx 前言 我们在做爬虫的过程中经常会遇到这样的情况&#xff0c;最初爬虫正常运行&#xff0c;正常抓取数据&#xff0c;一切看起来都是那么的美好&#xff0c;然而一杯茶的功夫可能就会出现错误&#xff0c;比如 403 Forbidden&…...

Typora结合PicGo + 使用Github搭建个人免费图床

文章目录 一、国内图床比较二、使用Github搭建图床三、PicGo整合Github图床1、下载并安装PicGo2、设置图床3、整合jsDelivr具体配置介绍 4、测试5、附录 四、Typora整合PicGo实现自动上传 每次写博客时&#xff0c;我都会习惯在Typora写好&#xff0c;然后再复制粘贴到对应的网…...

【Redis】redis简介与安装

Redis 简介 Redis 是完全开源的&#xff0c;遵守 BSD 协议&#xff08;Berkeley Software Distribution 意思是"伯克利软件发行版&#xff09;&#xff0c;是一个高性能的 key-value 数据库。具有以下几个比较明显的特点&#xff1a; 性能极高 – Redis能读的速度可以达…...

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器&#xff0c;centos8.2系统&#xff0c;docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …...

编程笔记 html5cssjs 086 JavaScript 内置对象

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

AttributeError: ‘DataFrame‘ object has no attribute ‘set_value‘怎么修改问题的解决

在jupyternotebook中运行&#xff1a; def remplacement_df_keywords(df, dico_remplacement, roots False):df_new df.copy(deep True)for index, row in df_new.iterrows():chaine row[plot_keywords]if pd.isnull(chaine): continuenouvelle_liste []for s in chaine.…...

Jmeter内置变量 vars 和props的使用详解

JMeter是一个功能强大的负载测试工具&#xff0c;它提供了许多有用的内置变量来支持测试过程。其中最常用的变量是 vars 和 props。 vars 变量 vars 变量是线程本地变量&#xff0c;它们只能在同一线程组内的所有线程中使用&#xff08;线程组内不同线程之间变量不共享&#…...

c#高级-正则表达式

正则表达式是由普通字符和元字符&#xff08;特殊符号&#xff09;组成的文字形式 应用场景 1.用于验证输入的邮箱是否合法。 2.用于验证输入的电话号码是否合法。 3.用于验证输入的身份证号码是否合法。等等 正则表达式常用的限定符总结&#xff1a; 几种常用的正则简写表达式…...

说说UE5中的几种字符串类

在Unreal Engine 5 (UE5) 的C中&#xff0c;与字符串相关的类主要包括&#xff1a; FString&#xff1a; Unreal Engine中用于处理字符串的主要类&#xff0c;提供了丰富的字符串操作方法和功能。 FText&#xff1a; 用于表示本地化文本的类&#xff0c;可以包含多种语言的文本…...

(done) 如何判断一个矩阵是否可逆?

参考视频&#xff1a;https://www.bilibili.com/video/BV15H4y1y737/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 这个视频里还暗含了一些引理 1.若 AX XB 且 X 和 A,B 同阶可逆&#xff0c;那么 A 和 B 相似。原因&#xff1…...

洗眼镜用的超声波清洗机哪一家更好一点?好用超声波清洗机排名

在我们日常生活中&#xff0c;眼镜、首饰、手表等细小物件的清洁一直是一个让人头疼的问题。传统的清洁方法不仅耗时耗力&#xff0c;还可能因为不当的操作而损伤到这些精细的物品。那么&#xff0c;有没有一种既快捷又安全的清洁方式呢&#xff1f;答案就是使用超声波清洗机。…...

(二十二)Flask之上下文管理第三篇【收尾—讲一讲g】

目录: 每篇前言:g到底是什么?生命周期在请求周期内保持数据需要注意的是:拓展—面向对象的私有字段深入讲解一下那句:每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领域博主、CSDN原力计划作者🔥🔥本文已…...

AMD锐龙SMU调试工具:从新手到专家的完整调优指南

AMD锐龙SMU调试工具&#xff1a;从新手到专家的完整调优指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode…...

作为一个网聊经常冷场的人,我试了试几款聊天回复神器

平时在线下跟人沟通还好&#xff0c;但一到微信或者Soul这种线上聊天环境&#xff0c;我就特别容易卡壳。尤其是遇到对方发来一些带有情绪的话&#xff0c;我经常不知道怎么接&#xff0c;打了一堆字又默默删掉&#xff0c;最后回个“哈哈”或者“早点休息”&#xff0c;硬生生…...

在Windows平台解锁iOS应用的全新体验:ipasim模拟器深度解析

在Windows平台解锁iOS应用的全新体验&#xff1a;ipasim模拟器深度解析 【免费下载链接】ipasim iOS emulator for Windows 项目地址: https://gitcode.com/gh_mirrors/ip/ipasim 想象一下这样的场景&#xff1a;作为一名开发者&#xff0c;你收到一个紧急的iOS应用测试…...

WarcraftHelper技术解析:魔兽争霸3兼容性修复实践指南

WarcraftHelper技术解析&#xff1a;魔兽争霸3兼容性修复实践指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper作为一款面向魔兽争霸…...

终极指南:5分钟快速修复Windows更新问题的完整解决方案

终极指南&#xff1a;5分钟快速修复Windows更新问题的完整解决方案 【免费下载链接】Script-Reset-Windows-Update-Tool This script reset the Windows Update Components. 项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool 当Windows更…...

告别300MB限制!用ZotFile插件+坚果云,打造你的免费Zotero文献同步方案

告别300MB限制&#xff01;用ZotFile插件坚果云打造高效文献同步方案 在学术研究的日常中&#xff0c;文献管理工具Zotero无疑是许多人的得力助手。然而&#xff0c;免费账户仅有的300MB存储空间&#xff0c;对于需要处理大量PDF文献的研究者来说&#xff0c;往往显得捉襟见肘。…...

AI加速新材料发现:神经网络势函数如何革新半导体材料研发

1. 项目概述&#xff1a;当AI撞上2nm工艺&#xff0c;材料研发的“游戏规则”正在被改写如果你在半导体行业待过几年&#xff0c;尤其是跟工艺和材料沾边&#xff0c;那你肯定对“摩尔定律的焦虑”深有体会。我们总在说工艺节点在微缩&#xff0c;从28nm、14nm、7nm一路狂奔到现…...

Coze平台智能物资匹配系统——完整设计与实现指南

Coze平台智能物资匹配系统——完整设计与实现指南 文档概述 本文档提供一套完整的技术解决方案,用于在Coze(扣子)平台上搭建智能物资匹配系统。该系统以“残值+运费最小化”为核心优化目标,支持用户输入地点和物资需求或上传表格文件,自动匹配最佳物资并输出等多组备选方…...

C# 结合 llama.cpp 实现 PaddleOCR-VL-1.5:本地 OCR 客户端开发全攻略

一、前言在日常工作中&#xff0c;我们经常需要从图片中提取文字信息。虽然市面上有不少 OCR 服务&#xff0c;但它们往往需要联网、存在隐私风险&#xff0c;或者需要付费。2026 年百度发布了开源文档解析模型 PaddleOCR-VL-1.5&#xff0c;该模型不仅支持常规文字识别&#x…...

从DataFrame到MySQL:利用pandas与pymysql实现高效数据迁移

1. 为什么需要把DataFrame数据写入MySQL&#xff1f; 在日常数据分析工作中&#xff0c;我们经常使用pandas处理数据。DataFrame作为pandas的核心数据结构&#xff0c;提供了丰富的数据操作功能。但分析结果最终需要持久化存储时&#xff0c;MySQL这类关系型数据库仍然是企业级…...