Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍
Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括:
-
异步通信: Ajax是异步的,这意味着它可以在不阻塞用户界面的情况下进行通信。用户可以继续与网页交互,而不必等待服务器响应。
-
数据交换: Ajax允许在客户端和服务器之间交换数据,通常使用XML、JSON或其他数据格式。这使得网页能够实时加载、显示和更新数据,而无需完全重新加载整个页面。
-
无需页面刷新: 传统的Web应用程序通常在每次与服务器进行交互时都需要刷新整个页面。而Ajax可以仅刷新页面的一部分,从而提供更流畅的用户体验。
-
动态内容: Ajax使开发人员能够创建动态的、实时更新的网页内容,这些内容可以根据用户的操作和需求进行动态加载和修改。
-
多种用途: Ajax不仅可以用于加载数据,还可以用于提交表单、验证用户输入、自动完成搜索、实时聊天和其他许多Web应用程序中的交互性功能。
Ajax通常由以下几个核心组件组成:
-
XMLHttpRequest对象: 这是Ajax的核心,它允许JavaScript代码与服务器进行通信,发送HTTP请求并接收响应。现代Web开发中通常使用
fetch API
代替XMLHttpRequest
,因为它更简单和强大。 -
服务器端脚本: 服务器端需要提供接受Ajax请求的端点,并能够处理这些请求,执行相应的操作,并返回响应数据。
-
异步事件处理: JavaScript代码需要能够在后台处理Ajax请求和响应,以确保不会阻塞用户界面。这通常涉及到使用回调函数或Promise来处理异步操作。
-
数据格式: Ajax可以使用多种数据格式来交换信息,包括XML、JSON、HTML和纯文本等。
Ajax已经成为现代Web应用程序开发的重要组成部分,它提供了一种有效的方式来实现实时、交互性和动态性的用户体验。很多流行的Web应用程序和框架(如React、Angular和Vue.js)都使用Ajax来处理数据的加载和交互。通过Ajax,Web应用程序可以更好地响应用户的需求,提供更好的用户体验。
案列实战
在上篇文章基础上https://blog.csdn.net/rubyw/article/details/132714499?spm=1001.2014.3001.5501使用Ajax动态渲染页面爬取,并存储到本地mongo数据库中
网站链接:https://spa1.scrape.center
只看菜单XHR下的信息,观察页面变化时的情况
第一页
详情页
# Ajax + MongoDB存储import pymongo
import requests
import logginglogging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')INDEX_URL = 'https://spa1.scrape.center/api/movie/?limit={limit}&offset={offset}'MONGO_CONNECTION_STRING = 'mongodb://localhost:27017'
MONGO_DB_NAME = 'movies'
MONGO_COLLECTION_NAME = 'movies'client = pymongo.MongoClient(MONGO_CONNECTION_STRING)
db = client['movies']
collection = db['movies']# 处理 JSON 接口
def scrape_api(url):logging.info('scraping %s...', url)try:response = requests.get(url)if response.status_code == 200:return response.json()else:logging.error('get invalid status code %s while scraping %s',response.status_code, url)return Noneexcept requests.RequestException:logging.error('error occurred while scraping %s', url, exc_info=True)LIMIT = 10def scrape_index(page):url = INDEX_URL.format(limit=LIMIT, offset=LIMIT * (page - 1))return scrape_api(url)DETAIL_URL = 'https://spa1.scrape.center/api/movie/{id}'def scrape_detail(id):url = DETAIL_URL.format(id=id)return scrape_api(url)TOTAL_PAGE = 10def save_data(data):collection.update_one({'name': data.get('name') # 根据name进行查询}, {'$set': data # 表示更新操作}, upsert=True) # 存在即更新,不存在即插入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)save_data(detail_data)logging.info('data saved successfully')if __name__ == '__main__':main()
可视化工具RoboMongo/Robo 3T,它使用简单,功能强大,官方网站为https://robomongo.org/,三大平台都支持,下载链接为https://robomongo.org/download。
最终在本地mongo数据库中可以看到最终爬取保存的结果:
相关文章:
Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
Ajax介绍 Ajax(Asynchronous JavaScript and XML)是一种用于在Web应用程序中实现异步通信的技术。它允许在不刷新整个网页的情况下,通过在后台与服务器进行数据交换,实时更新网页的一部分。Ajax的主要特点包括: 异步通…...
JavaScript的面向对象
一、认识对象 1.概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。 什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合…...
MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具
MybatisPlus 快速入门 常见注解 配置_软工菜鸡的博客-CSDN博客 2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此…...
TSN时间敏感网络
目录 时间敏感网络介绍 子协议介绍 时间同步 IEEE802.1AS 调度和流量整形 IEEE802.1Q IEEE802.1Qbv IEEE802.1cr IEEE802.1Qbu IEEE802.1Qch IEEE802.1Qav IEEE802.1Qcc 纠错机制与安全 IEEE802.1Qci IEEE802.1CB IEEE802.1Qca 参考 时间敏感网络介绍 TSN(Tim…...
【2023年数学建模国赛】C题解题思路
第一问 要求分析分析蔬菜各品类及单品销售量的分布规律及相互关系。该问题可以拆分成三个角度进行剖析。 1)各种类蔬菜的销售量分布、蔬菜种类与销售量之间的关系;2)各种类蔬菜的销售量的月份分布、各种类蔬菜销售量与月份之间的相关关系&a…...
5分钟 将“.py”文件转为“.pyd”文件
代码: from distutils.core import setup from distutils.extension import Extension from Cython.Build import cythonize import osfile_list os.listdir("./") extensions [] for file in file_list:if file.endswith(".py") and file !…...
python 入门到精通(一)
文章目录 1.使用pycharm进行第一个程序的编写2.python基础语法篇2.1 常用的值类型2.2 注释2.3 变量2.4 数据类型2.5 数据类型转换2.6 什么是标识符2.7 运算符2.8 字符串扩展2.8.1 字符串拼接2.8.2 字符串格式化2.8.3 格式化的精度控制2.8.4 字符串格式化 - 快速写法2.8.5 字符串…...
AJAX (Asynchronous JavaScript And XML)异步的JavaScript 和 XML
1、概念 Asynchronous JavaScript And XML 异步的JavaScript 和 XML异步和同步:客户端和服务器端相互通信的基础上 同步:客户端必须等待服务端的响应。在等待的期间客户端不能做其他操作。异步:客户端不需要等待服务器端的响应。在服务器…...
华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决
目录 引出安装JDK8环境查看是否有默认jar上传Linux版本的jar包解压压缩包配置环境变量 上传jar包以及运行问题上传Jar包运行控制台开放端口访问失败—见问题记录关闭Jar的方式1.进程kill -92.ctrl c退出 问题记录:【!】未解决各种方式查看端口情况联系工程师最后排查…...
安卓多渠道打包(五)360加固walle多渠道打包
背景: 1、360加固宝,签名收費了,脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中,使用360加固,再用walle签名,产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…...
Jmeter 实现 mqtt 协议压力测试
1. 下载jmeter,解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例,下载地址: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压: unzip apache-jmeter-5.4.3.zip 2. 下载m…...
蓝桥杯官网练习题(凑算式)
类似填空题: ①算式900: https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501https://blog.csdn.net/s44Sc21/article/details/132746513?spm1001.2014.3001.5501 ②九宫幻方③七星填数④幻方填空:https:/…...
机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)
🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 手撕线性回归1之线性回归类的实现 手撕线性回归2之单特征线性回归 手撕线性回归3之多特征线性回归 手撕线性回归4之非线性回归 1…...
【C语言基础】那些你可能不知道的C语言“潜规则”
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
android framework之Applicataion启动流程分析(三)
现在再回顾一下Application的启动流程,总的来说,虽然进程的发起是由ATMS服务发起的,但是进程的启动还是由AMS负责,所以需要调用AMS的startProcess()接口完成进程启动流程,AMS要处理的事情很多,它将事务交给…...
使用Scrapy框架集成Selenium实现高效爬虫
引言: 在网络爬虫的开发中,有时候我们需要处理一些JavaScript动态生成的内容或进行一些复杂的操作,这时候传统的基于请求和响应的爬虫框架就显得力不从心了。为了解决这个问题,我们可以使用Scrapy框架集成Selenium来实现高效的爬…...
Maven 和 Gradle 官方文档及相关资料的网址集合
文章目录 官方MavenGradle 笔者MavenGradle 官方 Maven Maven 仓库依赖包官方查询通道:https://mvnrepository.com/ Maven 插件官方文档:https://maven.apache.org/plugins/ 安卓依赖包官方查询通道*:https://maven.google.com/web/ Gra…...
docker概念、安装与卸载
第一章 docker概念 Docker 是一个开源的应用容器引擎。 Docker 诞生于2013年初,基于 Go 语言实现,dotCloud 公司出品,后改名为 Docker Inc。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发…...
elasticsearch访问9200端口 提示需要登陆
项目场景: 提示:这里简述项目相关背景: elasticsearch访问9200端口 提示需要登陆 问题描述 提示:这里描述项目中遇到的问题: 在E:\elasticsearch-8.9.1-windows-x86_64\elasticsearch-8.9.1\bin目录下输入命令 ela…...
【深度学习】 Python 和 NumPy 系列教程(一):Python基本数据类型:1、数字(整数、浮点数)及相关运算;2、布尔值
目录 一、前言 二、实验环境 三、Python基本数据类型 1. 数字 a. 整数(int) b. 浮点数(float) c. 运算 运算符 增强操作符 代码整合 d. 运算中的类型转换 e. 运算函数abs、max、min、int、float 2. 布尔值(…...
无swing,高级javaSE毕业之贪吃蛇游戏(含模块构建,多线程监听服务)
JavaSE,无框架实现贪吃蛇 文章目录 JavaSE,无框架实现贪吃蛇1.整体思考2.可能的难点思考2.1 如何表示游戏界面2.2 如何渲染游戏界面2.3 如何让游戏动起来2.4 蛇如何移动 3.流程图制作4.模块划分5.模块完善5.0常量优化5.1监听键盘服务i.输入存储ii.键盘监…...
HDD-FAT32 ZIP-FAT32 HDD-FAT16 ZIP-FAT16 HDD-NTFS
FAT32、FAT16指的是分区格式, FAT16单个文件最大2G FAT32单个文件最大4G NTFS单个文件大于4G HDD是硬盘启动 ZIP是软盘启动 U盘选HDD HDD-NTFS...
王道数据结构编程题 二叉树
二叉树定义 以下为本文解题代码的二叉树定义。 struct TreeNode {int val;TreeNode* left, *right;TreeNode(int val 0, TreeNode* left nullptr, TreeNode* right nullptr): val(val), left(left), right(right) {} };非递归后序遍历 题目描述 编写后序遍历二叉树的非递…...
登录怎么实现的,密码加密了嘛?使用明文还是暗文,知道怎么加密嘛?
在Java中登录功能的实现通常包括以下步骤,其中密码应该以加密形式存储在数据库中,而不以明文形式存储,以增强安全性: 登录功能的实现步骤: 用户输入: 用户在登录页面上输入用户名和密码。 传输到服务器&a…...
Nginx和Tomcat负载均衡实现session共享
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架。 此框架的优势: 1、支持Tomcat6和Tomcat7 2、操作粘性或不黏性Session 3、没有单点故障 4、T…...
【算法题】210. 课程表 II
题目: 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学习课程 0 ,…...
“数据类型不一致”会走索引吗?
分析&回答 字符串类型的索引 id_1 varchar(20) NOT NULL这样下面两条语句的结果是一样的: SELECT * FROM ix_test WHERE id_11; SELECT * FROM ix_test WHERE id_11;执行计划是不同的: mysql> explain select * from ix_test where id_11; | 1 …...
Leetcode 1572.矩阵对角线元素之和
给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1: 输入:mat [[1,2,3],[4,5,6],[7,8,9]] 输出:25 解释:对角线的和为ÿ…...
[PG]将一行数据打散成多行数据
原始数据 比如有如此表结构定义: 假如查询数据如下: select dt as "日期",bj_count as "北京", sh_count as "上海",gz_count as "广州", sz_count as "深圳" from city_stats order by dt--------------------…...
二蛋赠书一期:《快捷学习Spring》
文章目录 前言活动规则参与方式本期赠书《快捷学习Spring》关于本书作者介绍内容简介读者对象 结语 前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,…...
东莞寮步网站设计/如何推广一个项目
安装环境系统环境:Windows 10 64位Apache版本:2.4.9PHP版本:5.5.12MongoDB版本:3.2.6Wamp版本:wamp 2.5 86位安装步骤一、确定php的compiler和确定php是否是线程安全版本通过查看phpinfo()可以确定,wamp下点…...
焦作会计做继续教育在哪个网站/郑州网站关键词优化公司
如何在两端同时发现信息那么,我们如何才能完成这些功能呢?路由服务必须能够在网络中找到正确的信息并将其发布到另一端。我们的路由服务必须具有自动发现并控制信息的功能,同时也必须能够识别并处理所有的主题和类型。由于DDS对内容预知&…...
网站开发软件技术开发公司/百度灰色关键词排名推广
一、 Collections算法类 它是一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。 格式:Collections.方法名() 就如数组的操作类Arrays类一样,Collections类是一个操作集合…...
合肥做公司网站一般多少钱/网页设计代码大全
中断由外部设备产生,异常由CPU内部产生(异常包括错误Fault, 陷阱Trap即故意出错,和终止Abort)。中断要找到中断服务程序所以需要IDT这个大数组来存放中断门(中断门就是一种段描述符,用于找到中断程序入口地…...
网站建设及代运营合同/营销做得好的品牌
xp下由于自己把控制面板--区域和语言选项--区域选项中的“中文”改为了“英文/美国”,所以以中文名字命名的.chm文件就打开了,改为英文名字后正常打开参考:解决XP不能打开CHM文件2006-07-27 13:50如果你的Windows XP不能打开chm格式的文件&am…...
西安淘宝网站建设公司排名/武汉网络营销公司排名
前面介绍了读取 state,这篇笔记介绍下 state 是如何触发写入的。1. Why考虑订阅 Kafka 写 HBase 的场景:写入 HBase 时,为了获取最大的写入性能,可能会先缓存到内存然后批量写入消费 Kafka 时,需要记录当前的 offsets&…...