python实例3.0——动态页面:Ajax数据爬取
页面内容的生成方式
动态页面区别于静态页面的最主要特征是页面内容的生成方式,动态页面的内容 生成方式可以分成两类,即服务端生成、客户端生成。
服务器端生成
Web内容管理系统,页面主要内容和页面的结构和表现方式分离。
Client/server/Database
脚本语言:jsp、asp、php等。
客户端生成
轻量级、局部的,例如给用户提示警告信息、显示定时时间等。
脚本语言: javascript、VBScript、ActionScript等
插件:Active X插件、Flash插件等
可能影响客户端安全。
动态网页经常使用的一种技术是Ajax请求技术。
Ajax = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) 优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页的内容。
实例所用链接:微博
实例所用浏览器:火狐
1.查找Ajax请求
- 以home开头的请求:空白框架,无实质内容
- 以config开头的请求:用于校验
- 以getIndex开头的请求
问题:我的找不到getIndex请求,是因为在主界面,没有进行任何操作,现在我点击进入
不断刷新网易云音乐下的内容,得到多个getIndex请求。
发现url的变换规律
变化的只有page的值,url由以下几部分组成。
2.查询JSON中信息
双击这里可以直接以json格式呈现
可以看出微博上的信息都在cards中,查看其中一个,里面含有微博正文,id,点赞数,转发量等等。
import json
import requests
from urllib.parse import urlencode
import re
from pyquery import PyQuery as pq # 这个库需要命令行pip 下载安装一下'''
url分为四部分
1 https://m.weibo.cn/api/container/getIndex?
2 containerid=2304131721030997_-_WEIBO_SECOND_PROFILE_WEIBO
3 &page_type=03
4 &page=2
'''# 构造请求
def get_page(i):headers = {'Host': 'm.weibo.cn','Referer': 'https://m.weibo.cn/profile/1721030997','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0','X-Requested-With': 'XMLHttpRequest'}params={'containerid':'2304131721030997_-_WEIBO_SECOND_PROFILE_WEIBO','page_type':'3','page':i}url = base_url + urlencode(params)response = requests.get(url,headers = headers)if response.status_code == 200:print("访问成功")return response.json()return None# 数据获取
def parse_page(source):items = source.get('data').get('cards') # items类型为listfor item in items:item = item.get('mblog') # item类型为dictif item:data = {'id': item.get('id'),'text': pq(item.get("text")).text(), # 仅提取内容中的文本'attitudes': item.get('attitudes_count'),'comments': item.get('comments_count'),'reposts': item.get('reposts_count')}# 创建一个字典存放内容yield data # 有yield说明为generator生成器# if source:# item1 = source['data']['cards']# ids = []# text = []# for item in item1:# item = item['mblog']# id_ = item['id']# text_ = item['raw_text']# ids.append(id_)# text.append(text_)# dictioanary = dict(zip(ids,text))# return dictioanaryif __name__=='__main__':base_url = 'https://m.weibo.cn/api/container/getIndex?'for i in range(2,5): # 我爬取的是第2,3,4页source = get_page(i) # 请求url# print(source)results = parse_page(source)for result in results: # 对于生成器来说,取出元素需要用循环print(result)
这里解释一下生成器generator:
提到生成器,你可能会有一个简单的概念,如果函数里使用yield关键字,那么这个函数就是一个生成器,不同于return,生成器使用yield来返回值。
yield和return实质上区别非常大,最明显之处便在于,return 语句执行后,函数就退出了,而yield语句执行时,仅仅是返回一个值而已,不存在函数结束这个概念,因此生成器都要结合for循环进行使用。
更加细致的解释请点击这个链接,我觉得这两个博主解释得很好。
yield 理解
generator生成器
python实例3.0——动态页面:Ajax数据爬取相关推荐
- 【Python爬虫学习笔记12】Ajax数据爬取简介
有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果.这种现象是因 ...
- Python爬虫——Ajax数据爬取
前言 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面数据,但使用requests得到的结果并没有.这是因为在requests获得 ...
- 《PYTHON3网络爬虫开发实践》——第六章 Ajax数据爬取
第六章 Ajax数据爬取 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:这是因为requests 获取的都是原始的HTML文档,而浏览器中的页面则是经过Java ...
- 简单爬虫Ajax数据爬取——今日头条图片爬取
一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...
- Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...
- (五) 爬虫教程 |Ajax 数据爬取
一.前言 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用 requests 得到的结果并没有,这是因为requ ...
- 基于python的自媒体和官媒数据爬取、可视化分析及云词图制作
创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...
- 基于python的自媒体和官媒数据爬取、对比可视化分析及云词图提取关键词
创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...
- python网络爬虫学习笔记(十一):Ajax数据爬取
文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...
最新文章
- Apache反向代理设置【转载】
- exe一机一码加密工具_Python代码加密混淆
- Java中使用SQLite数据库
- Centos 7安装与配置chef
- 数据库连接池-连接的关闭内幕
- 余敖的实验整理(还没完成)
- myeclipse启动php,myeclipse,jdk_启动myeclipse报错,myeclipse,jdk - phpStudy
- IDEA远程调试Tomcat
- 手机相机里面的m_2020拍立得相机选购指南 富士乐魔徕卡推荐 总有一款适合你...
- Ubuntu系统设置截图快捷键
- Win10秘笈:两种方式修改网卡物理地址(MAC)
- 打印机共享无法访问该计算机,共享打印机拒绝访问怎么办详细解决方案
- amoeba主从复制
- 安防领域名词explain
- 二十五、PHP内核探索:常量的实现 ☞ 脱离C语言和数学讨论底层都是耍流氓
- 代码覆盖率和功能覆盖率
- 拳皇重生服务器维护,拳皇98终极之战OL格斗家重生系统玩法攻略
- 太励志!考研哈工大高数39分,但逆袭成为院士,做出诺奖级发现
- android 检查电话号码是否合理(含大陆和香港格式)
- Ninja构建系统入门--GN与Ninja构建过程