页面内容的生成方式
动态页面区别于静态页面的最主要特征是页面内容的生成方式,动态页面的内容 生成方式可以分成两类,即服务端生成、客户端生成。
服务器端生成
 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数据爬取相关推荐

  1. 【Python爬虫学习笔记12】Ajax数据爬取简介

    有时候在我们设计利用requests抓取网页数据的时候,会发现所获得的结果可能与浏览器显示给我们的不一样:比如说有的信息我们通过浏览器可以显示,但一旦用requests却得不到想要的结果.这种现象是因 ...

  2. Python爬虫——Ajax数据爬取

    前言 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面数据,但使用requests得到的结果并没有.这是因为在requests获得 ...

  3. 《PYTHON3网络爬虫开发实践》——第六章 Ajax数据爬取

    第六章 Ajax数据爬取 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:这是因为requests 获取的都是原始的HTML文档,而浏览器中的页面则是经过Java ...

  4. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

  5. Python3 爬虫学习笔记 C03 【Ajax 数据爬取】

    Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...

  6. (五) 爬虫教程 |Ajax 数据爬取

    一.前言 有时候我们在用 requests 抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用 requests 得到的结果并没有,这是因为requ ...

  7. 基于python的自媒体和官媒数据爬取、可视化分析及云词图制作

    创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...

  8. 基于python的自媒体和官媒数据爬取、对比可视化分析及云词图提取关键词

    创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...

  9. python网络爬虫学习笔记(十一):Ajax数据爬取

    文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...

最新文章

  1. Apache反向代理设置【转载】
  2. exe一机一码加密工具_Python代码加密混淆
  3. Java中使用SQLite数据库
  4. Centos 7安装与配置chef
  5. 数据库连接池-连接的关闭内幕
  6. 余敖的实验整理(还没完成)
  7. myeclipse启动php,myeclipse,jdk_启动myeclipse报错,myeclipse,jdk - phpStudy
  8. IDEA远程调试Tomcat
  9. 手机相机里面的m_2020拍立得相机选购指南 富士乐魔徕卡推荐 总有一款适合你...
  10. Ubuntu系统设置截图快捷键
  11. Win10秘笈:两种方式修改网卡物理地址(MAC)
  12. 打印机共享无法访问该计算机,共享打印机拒绝访问怎么办详细解决方案
  13. amoeba主从复制
  14. 安防领域名词explain
  15. 二十五、PHP内核探索:常量的实现 ☞ 脱离C语言和数学讨论底层都是耍流氓
  16. 代码覆盖率和功能覆盖率
  17. 拳皇重生服务器维护,拳皇98终极之战OL格斗家重生系统玩法攻略
  18. 太励志!考研哈工大高数39分,但逆袭成为院士,做出诺奖级发现
  19. android 检查电话号码是否合理(含大陆和香港格式)
  20. Ninja构建系统入门--GN与Ninja构建过程

热门文章

  1. 你的电脑已经成为肉鸡的六种现象
  2. 20181009-6 选题 Scrum立会报告+燃尽图 05
  3. 不依赖浏览器控制台的JavaScript断点调试方法
  4. Java 获得Class的绝对路径方法
  5. XMLHelper 辅助类
  6. 密码学-网站的安全登录认证设计
  7. mapreduce与spark的区别--内容详细
  8. Java继承、封装、多态
  9. 安装oracle后电脑无法启动,求救,Oracle11g安装成功后,总是无法启动
  10. 软件测试—软件测试基础知识—用例模板