爬虫实例7 爬取豆瓣电影数据 (json+ajax)
什么是异步加载(ajax)、同步加载、延迟加载?
同步加载:
同步模式又称阻塞模式,会阻止浏览器的后续处理,停止了后续的文件的解析,执行,如图像的渲染。流览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作,重定向,输出document等默认行为,所以同步才是最安全的。通常会把要加载的js放到body结束标签之前,使得js可在页面最后加载,尽量减少阻塞页面的渲染。这样可以先让页面显示出来
异步加载:
异步加载也叫非阻塞模式加载,浏览器在下载js的同时,同时还会执行后续的页面处理。
在script标签内,用js创建一个script元素并插入到document中,这种就是异步加载js文件了。同步加载流程是瀑布模型,异步加载流程是并发模型
延迟加载:
有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。延迟加载就是一开始并不加载这些暂时不用的js,而是在需要的时候或稍后再通过js 的控制来异步加载。
也就是将 js 切分成许多模块,页面初始化时只加载需要立即执行的 js ,然后其它 js 的加载延迟到第一次需要用到的时候再加载。
特别是页面有大量不同的模块组成,很多可能暂时不用或根本就没用到。
就像图片的延迟加载,在图片出现在可视区域内时(在滚动条下拉)才加载显示图片
什么是json?
json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。
类似于:国际通用语言-英语,中国56个民族不同地区的通用语言-普通话
知道了什么是异步加载,什么是json,我们用一个爬虫来看看具体的实现。
目标地址:https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start=0
使用异步加载的代表网站有豆瓣,今日头条等。我们用豆瓣举例。
首先我们打开抓包工具,发现我们要找的的数据在页面源代码中是没有的。
那json数据到底在哪里?如果我们拿不到我们想要的数据,就无法完成数据抓取工作。
找到json数据步骤
拿到json数据后我们拿到浏览器json解析工具看看数据的格式和特点
要爬取多个页面,就要分析链接地址的区别在哪里
可以很清楚的看到这里的区别只有最后的start不一样,也就是说每一页在上一条的基础上都增加了20条数据。
最后附上代码,每行代码都注释的很清楚了。只需要改UA参数和数据库参数就能直接运行。
import requests
import json
import pymysql
#数据解析
allMovelist=[]#保存所有影视信息
currenPage=1#默认页面等于1
def parse():global currenPage#这个currenPage是局部变量url="https://movie.douban.com/j/new_search_subjects?start=0"headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36"}conn = pymysql.connect(host="localhost", db="test", user="root", passwd="123456")cur = conn.cursor()for p in range(1,21):#遍历1,21页的数据,你还可以改的更多,我也不知道有多少页url = "https://movie.douban.com/j/new_search_subjects?start=%d" % (p * 20)# 拿到json数据html_json = requests.get(url=url, headers=headers).text# 转换为json文本json_text = html_json# 转换为字典move_dict = json.loads(json_text)# 判断数据是否为空,如果为空直接返回if len(move_dict["data"]) == 0:return# 保存信息到字典for one_move in move_dict["data"]:print(one_move)# 获取电影名称title = one_move["title"]# 获取导演directors = one_move["directors"]directors = ",".join(directors)#这一步是因为可能多个导演,将他们的名字用逗号隔开,下同# 获取演员casts = one_move["casts"]casts = ",".join(casts)# 获取评分rate = (one_move["rate"])# 一部电影信息oneMovelist = [title, directors, casts, rate]allMovelist.append(oneMovelist)#将每部电影信息添加到所有信息列表里,注意上边定义的空列表sql = "insert into actor(title,directors,casts,rate)values ('" + title + "','" + directors + "','" + casts + "','" + str(rate) + "')"cur.execute(sql)conn.commit()#提交数据conn.close()#关闭游标
# 主函数
if __name__ == '__main__':parse()#调用函数print(allMovelist)
新手博主,请前辈批评指正——丁一
爬虫实例7 爬取豆瓣电影数据 (json+ajax)相关推荐
- python实现爬虫探探_全栈 - 9 实战 爬取豆瓣电影数据
这是全栈数据工程师养成攻略系列教程的第九期:9 实战 爬取豆瓣电影数据. 掌握了爬虫的基本原理和代码实现,现在让我们通过实战项目巩固一下. 确定目标 在写爬虫之前应当想清楚:我需要哪方面的数据?需要包 ...
- Python爬虫入门(爬取豆瓣电影信息小结)
Python爬虫入门(爬取豆瓣电影信息小结) 1.爬虫概念 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或脚本.爬虫的本质是模拟浏览器打开网页,获取网页中我们想要的那部分数据. 2.基本流程 ...
- Java爬取豆瓣电影数据
所用到的技术有Jsoup,HttpClient. Jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CS ...
- python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息
这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...
- Python爬虫实战 | (3) 爬取豆瓣电影Top250
在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...
- python爬虫,Scrapy爬取豆瓣电影《芳华》电影短评,分词生成词云图。
项目github地址:https://github.com/kocor01/scrapy_cloud Python版本为3.6 自己写的简单架构<python爬虫,爬取豆瓣电影<芳华> ...
- python爬取豆瓣影评_【python爬虫实战】爬取豆瓣影评数据
概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...
- 【爬虫实践】记一次Scrapy框架入门使用爬取豆瓣电影数据
本次的学习分享主要是使用一次Scrapy框架,毕竟在很多次的时候,自己在提取一些或是需要实验数据的时候,数据量要求不大,很快便能通过简单的request等库进行调用,然后获取数据. 这次,则是想要使用 ...
- 爬虫实战:爬取豆瓣电影 Top-250 到 Excel 表格中
最近在家无聊自学了python的一些基础知识.后来看到许多朋友都在写爬虫,自己感觉很有意思,也想试一下 >____< 其实本来我是想将数据爬取到excel之后再增加一些数据库操作,然后用f ...
- BeautifulSoup爬取豆瓣电影数据
BeautifulSoup爬取豆瓣TOP250 豆瓣爬取地址 https://movie.douban.com/top250?format=text BeautifulSoup官网地址 https:/ ...
最新文章
- Linux Supervisor的安装与使用入门
- adc0832对光电二极管进行数据采集_实车采集的现场数据如何导入控制模型进行分析...
- ubuntu 16.04 多个python版本切换
- 代码规范之华为公司代码规范
- CentOS下禁止防火墙
- 网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门
- 14考研计算机考前,计算机专业考研考前终极预测试题.docx
- ^_-诚征BLOG友情连接
- Qt文档阅读笔记-QCompleter官方解析及实例
- VMware内虚拟机自适应及最大化窗口调整方式
- 倒数58天 -- 分治法 -- 使用循环求方程的一个解
- 如果华为自研的芯片无法给华为手机带来更高的性价比,那么华为自研芯片给消费者带来的意义是什么呢?
- 系统学习数字图像处理之彩色图像处理
- Centos7安装WPS
- 三角形外接圆圆心 算法 删改版
- Unable to establish SSL connection.
- 女神让我去修电脑,无数次戳中笑点
- android vcard解析代码,Android从Intent获取vCard数据
- apicloud缓存
- 遥感影像的“全色”与“多光谱”