《移动通信网络优化》课件-项目四 实现个人微博的爬取_第1页
《移动通信网络优化》课件-项目四 实现个人微博的爬取_第2页
《移动通信网络优化》课件-项目四 实现个人微博的爬取_第3页
《移动通信网络优化》课件-项目四 实现个人微博的爬取_第4页
《移动通信网络优化》课件-项目四 实现个人微博的爬取_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实现个人微博的爬取目录01任务1使用Ajax实现个人微博的爬取02任务2:使用Selenium实现自动化爬取任务一:使用Ajax实现个人微博的爬取

2、掌握Ajax的基本用法1、了解Ajax基本原理任务目标任务描述

有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样,在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有。因为requests获取的都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果。

如果遇到这样的页面,直接利用requests等库来抓取原始页面,是无法获取到有效数据的,需要分析网页后台向接口发送的Ajax请求,如果可以用requests来模拟Ajax请求,那么就可以成功抓取了。任务一

使用Ajax实现个人微博的爬取1.1Ajax概述Ajax全称为AsynchronousJavaScriptandXML,即异步的JavaScript和XML。

它不是一门编程语言,而是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。

对于传统的网页,如果想更新其内容,那么必须要刷新整个页面,但有了Ajax,便可以在页面不被全部刷新的情况下更新其内容。在这个过程中,页面实际上是在后台与服务器进行了数据交互,获取到数据之后,再利用JavaScript改变网页,这样网页内容就会更新了。实操小任务

打开任意网址并下拉,观察在下拉的过程中网页的变化任务一

使用Ajax实现个人微博的爬取1.2Ajax基本原理

发送Ajax请求到网页更新的这个过程可以简单分为3步:1.发送请求2.解析内容3.渲染网页任务一

使用Ajax实现个人微博的爬取发送请求

JavaScript可以实现页面的各种交互功能,Ajax也不例外,它也是由JavaScript实现的,实际上执行了如下代码:新建XMLHttpRequest对象调用onreadystatechange属性设置监听调用open()和send()方法向服务器发送请求当服务器返回响应时,对应的方法便会被触发,然后在这个方法里解析响应内容任务一

使用Ajax实现个人微博的爬取解析内容

得到响应之后,onreadystatechange属性对应的方法便会被触发:当服务器返回响应时,对应的方法便会被触发,此时利用xmlhttp的responseText属性便可取到响应内容任务一

使用Ajax实现个人微博的爬取渲染网页

解析完响应内容就可以调用JavaScript来针对解析完的内容对网页进行

下一步处理

得到响应之后,onreadystatechange属性对应的方法便会被触发:可以对某个元素内的源代码进行更改,这样网页显示的内容就改变了—DOM操作将ID为myDiv的节点内部的HTML代码更改为服务器返回的内容,这样myDiv元素内部便会呈现出服务器返回的新数据,网页的部分内容看上去就更新了任务一

使用Ajax实现个人微博的爬取1.3Ajax分析方法(需借助浏览器的开发者工具)

首先,用浏览器打开链接/u/1893892941,随后在页面鼠标右键,从弹出的快捷菜单中选择“检查”选项,此时便会弹出开发者工具任务一

使用Ajax实现个人微博的爬取

Ajax其实有其特殊的请求类型,它叫作xhr,我们可以发现一个名称以getIndex开头的请求,其Type为xhr,这就是一个Ajax请求任务一

使用Ajax实现个人微博的爬取用鼠标点击这个请求,可以查看这个请求的详细信息标记此请求是Ajax请求任务一

使用Ajax实现个人微博的爬取

随后点击一下预览,即可看到响应的内容,它是JSON格式的。这里浏览器为我们自动做了解析,点击箭头即可展开和收起相应内容用来渲染个人主页所使用的数据。JavaScript接收到数据之后,再执行相应的渲染方法,整个页面就渲染出来了任务一

使用Ajax实现个人微博的爬取

另外,也可以切换到响应选项卡,从中观察到真实的返回数据任务一

使用Ajax实现个人微博的爬取

切回到第一个请求,观察一下它的Response是什么?这是最原始的链接返回的结果,其代码只有不到50行,结构也非常简单,只是执行了一些JavaScript任务一

使用Ajax实现个人微博的爬取

过滤:利用浏览器开发者工具的筛选功能筛选出所有的Ajax请求在请求的上方有一层筛选栏,直接点击XHR,此时在下方显示的所有请求便都是Ajax请求了任务一

使用Ajax实现个人微博的爬取1.4Ajax结果提取

分析请求

打开Ajax的XHR过滤器,然后一直滑动页面以加载新的微博内容。可以看到,会不断有Ajax请求发出,选定其中一个请求,分析它的参数信息。点击该请求,进入详情页面有变化:很明显这两个参数是用来控制翻页的任务一

使用Ajax实现个人微博的爬取

分析响应

响应内容是JSON格式,浏览器开发者工具自动做了解析以方便我们查看,最关键的那一部分信息就是list微博的总数量,我们可以根据这个数字来估算分页数一个列表,列表中有一个比较重要的字段tag_struct,展开可以发现它包含的正是微博的一些信息任务一

使用Ajax实现个人微博的爬取如何实现翻页

请求一个接口,就可以得到若干条条微博,而且请求时只需要考虑图中所示参数即可。这样的话,我们只需要简单做一个循环,就可以获取所有微博了任务实施

使用Ajax实现目标微博:/u/1665000315?tabtype=home的爬取任务小结通过学习了解Ajax基本原理。掌握Ajax的基本分析及结果提取方法。能够遵守法律法规,合法有序地爬取数据。任务二:使用Selenium实现自动化爬取

任务描述

JavaScript动态渲染的页面不止Ajax这一种。有些网页是由JavaScript生成的,并非原始HTML代码,类似淘宝这种页面,它即使是Ajax获取的数据,但是其Ajax接口含有很多加密参数,我们难以直接找出其规律,也很难直接分析Ajax来抓取。因此,直接模拟浏览器的运行,绕过这个过程,做到在浏览器中看到是什么样,抓取的源码就是什么样,也就是“可见即可爬”,不用再去管网页内部的JavaScript用了什么算法渲染页面,不用管网页后台的Ajax接口到底有哪些参数。

2、能配置selenium自动化环境3、掌握selenium库的基本使用1、会安装对应浏览器驱动任务目标任务二

使用Selenium实现自动化爬取2.1Selenium概述

Selenium

是一个用于Web应用程序自动化测试的工具。它可以直接在浏览器中运行,就像用户在浏览器中操作一样。其支持多种浏览器,包括IE、Firefox、Chrome、Safari等。对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效。2.2Selenium环境配置

1.配置对应浏览器驱动2.安装Selenium库

pipinstallselenium3.验证安装任务二

使用Selenium实现自动化爬取2.3Selenium基本用法

1.初始化浏览器对象Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等,还有Android、BlackBerry等手机端的浏览器。另外,也支持无界面浏览器PhantomJS。完成了浏览器对象的初始化并将其赋值为browser对象接下来就可以调用browse对象执行各个动作以模拟浏览器操作任务二

使用Selenium实现自动化爬取2.访问页面

可以用get()方法来请求网页,参数传入链接URL即可,下面以访问淘宝为例运行后弹出了Edge浏览器并且自动访问了淘宝,控制台输出淘宝页面的源代码,随后浏览器关闭任务二

使用Selenium实现自动化爬取3.查找节点1)单个节点—find_element通用方法,以淘宝搜索框节点为例

id属性值是q,name属性值也是q可以用多种方式获取它的属性任务二

使用Selenium实现自动化爬取根据id属性获取CSS选择器XPath3个节点都是WebElement类型,是完全一致的任务二

使用Selenium实现自动化爬取

所有获取单个节点的方法任务二

使用Selenium实现自动化爬取2)多个节点—find_elements方法,以淘宝左侧导航条的所有条目为例任务二

使用Selenium实现自动化爬取任务二

使用Selenium实现自动化爬取4.节点交互(以百度搜索栏为例)

常见用法:输入文字时用send_keys方法,清空文字时用clear方法,点击按钮时用click方法任务二

使用Selenium实现自动化爬取任务二

使用Selenium实现自动化爬取5.动作链

一些操作,没有特定执行对象,比如鼠标拖曳、键盘按键等打开网页中的一个拖拽实例声明ActionChains对象调用actions变量的drag_and_drop()方法调用perform()方法执行动作任务二

使用Selenium实现自动化爬取6.运行JavaScript

对于某些操作,SeleniumAPI并没有提供(下拉进度条),直接模拟运行JavaScript,使用execute_script()方法,基本上API没有提供的所有功能都可用执行JS的方式来实现。任务二

使用Selenium实现自动化爬取7.获取节点信息1)获取属性

使用get_attribute()方法获取节点属性,但前提是先选中这个节点传入想要获取的属性名,就可以得到它的值了任务二

使用Selenium实现自动化爬取2)获取文本值

直接调用text属性就可得到节点内部的文本信息,相当于BeautifulSoup的get_text()方法、pyquery的text()方法任务二

使用Selenium实现自动化爬取任务二

使用Selenium实现自动化爬取3)获取ID、位置、标签名、大小id属性可获取节点id,location属性可获取该节点在页面中相对位置,tag_name属性可获取标签名称,size属性可获取节点大小,即宽高任务二

使用Selenium实现自动化爬取8.切换FrameSelenium打开页面后,默认是在父级Frame里面操作,而此时如果页面中还有子Frame,它不能获取到子Frame里面的节点,需要使用switch_to.frame()方法来切换Frame任务二

使用Selenium实现自动化爬取9.延时等待

在Selenium中,get()方法会在网页框架加载结束后结束执行,此时如果获取page_source,可能并不是浏览器完全加载完成的页面,如果某些页面有额外的Ajax请求,我们在网页源代码中也不一定能成功获取到。所以,这里需要延时等待一定时间,确保节点已经加载出来。1)隐式等待

如果Selenium没有在DOM中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常,默认的时间是0任务二

使用Selenium实现自动化爬取2)显式等待

隐式等待的效果并没有那么好,因为只规定了一个固定时间,而页面的加载时间会受到网络条件的影响。显式等待方法更合适,它指定要查找的节点,然后指定一个最长等待时间。如果规定时间内加载出了这个节点,就返回查找的节点;如果到了规定时间依然没有加载出该节点,则抛出超时异常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论