版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据采集技术项目一:爬取百度首页项目
背景随着互联网的迅速发展,网络爬虫技术在信息获取、数据处理和分析等领域的应用越来越广泛。本项目旨在通过Python编程实现一个简单的网络爬虫,实现对百度首页的基本信息爬取,包括标题、描述、关键词等,同时可以了解网站的基本结构和信息展示方式,为后续的数据处理及分析提供基础数据和支持。目录01任务一认识爬虫02任务二使用浏览器开发者工具03任务三爬取百度首页任务一:认识爬虫
有趣的君子协议
2000年,eBay与Bidder'sEdge(BE)之间产生了一系列法律纠纷。Bidder'sEdge是一家在线价格比较网站,其运营依赖于从多个网站抓取数据来为消费者提供商品价格比较服务,网站69%的拍卖信息都来自eBay,而eBay是当时互联网拍卖领域的巨头。eBay为了保护自身的系统资源、用户体验以及商业利益等,在其网站设置了robots.txt文件,明确禁止BE的蜘蛛程序抓取其网站内容。据估算,BE如果停止抓取eBay内容,意味着BE将损失至少三分之一的用户。因此,BE无视eBay的robots.txt协议,继续抓取eBay的拍卖信息。eBay与BE数次沟通交涉未果后,将Bidder'sEdge告上联邦法庭,要求禁止Bidder'sEdge的违规抓取行为。任务描述爬虫程序指能够自动从相关网页中搜索与提取所需数据的程序,提取与存储这些数据是进行数据分析的前提与关键。Python语言因其简单、易读、可扩展的特性,在编写爬虫程序方面有特别优势。通过本任务学习,同学们将了解爬虫的基本概念、原理及分类,并能够正确使用网络爬虫技术,遵守法律法规,合法有序地爬取数据。任务目标了解网络基础知识0201掌握网络爬虫的基本概念及工作过程会判断网站结构并确定正确爬取策略0403掌握robots.txt协议使用方法1.1.1爬虫的概念1.1.1什么是爬虫网络爬虫是一种自动化程序或脚本,用于模拟浏览器行为,按照特定规则抓取互联网信息并提取有用数据的程序1.1.1爬虫的概念如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;从技术层面来说就是通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频)
爬到本地,进而提取自己需要的数据,存放起来使用;1.1.2爬虫的合法性目前,多数网站允许将爬虫爬取的数据用于个人使用或者科学研究。但如果将爬取的数据用于其他用途,尤其是转载或者商业用途,则依据各网站的具体情况有不同的后果,严重的将会触犯法律或者引起民事纠纷。同时,也需要注意,以下两种数据是不能爬取的,更不能用于商业用途:(1)个人隐私数据,如姓名、手机号码、年龄、血型、婚姻情况等,爬取此类数据将会触犯个人信息保护法。(2)明确禁止他人访问的数据,例如,用户设置过权限控制的账号、密码或加密过的内容等。
另外,还需注意版权相关问题,有作者署名的受版权保护的内容不允许爬取后随意转载或用于商业用途。1.1.3爬虫的价值爬虫的价值可以捕获网站的时间线追踪,以帮助诊断性能问题监控网页性能可通过爬取前端的数据,来监控网站数据是否有异常(比如数据掉0)。如果数据异常,可发告警到数据人员。监控网页数据比如想要测试一个前端页面的兼容性、前端页面UI是否有bug,只需要模拟执行表单提交、键盘输入等页面操作。UI自动化测试比如比价购物、各种热搜排行、舆情追踪、新闻追踪等等。爬取网页数据020401031.1.3爬虫的价值爬虫基本原理1.Python爬虫的工作过程爬虫的工作原理其实和使用浏览器访问网页的工作原理是完全一样的,根据HTTP协议来获取网页内容的。其工作流程主要包括如下两个步骤:连接DNS域名服务器,将待抓取的URL进行域名解析。连接解析根据HTTP协议,发送HTTPrequest请求和response响应来获取网页内容。发送获取1.1.4爬虫的分类1)通用爬虫通用网络爬虫又称为全网爬虫,该类爬虫比较适合为搜索引擎搜索广泛的主题,主要由搜索引擎或大型Web服务提供商使用。2)聚焦网络爬虫聚焦网络爬虫又被称作主题网络爬虫,其最大的特点是只选择性地爬行与预设的主题相关的页面。3)增量式网络爬虫增量式网络爬虫只对已下载网页采取增量式更新或只爬行新产生的及已经发生变化的网页4)深层网络爬虫深层页面为大部分内容无法通过静态链接获取,隐藏在搜索表单后的,需要用户提交关键词后才能获得的Web页面。按照系统和运作原理1.1.5反爬机制
(1)第一种反爬机制:robots.txt协议明确规定了网站中哪些数据可以被爬取哪些不可以被爬取。(2)通过User-Agent校验反爬浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,服务器会通过User-Agent的值来区分不同的浏览器。(3)通过访问频度反爬网站会对普通用户访问频度设定一个阈值,如果一个IP单位时间内访问频度超过了预设的阈值,将会对该IP做出访问限制。通常需要经过验证码验证后才能继续正常访问,严重的甚至会禁止该IP访问网站一段时间。1.1.5反爬机制
(4)通过验证码校验反爬有部分网站不论访问频度如何,一定要来访者输入验证码才能继续操作。例如12306网站,不管是登陆还是购票,全部需要验证验证码,与访问频度无关。(5)通过变换网页结构反爬爬虫大部分情况下都需要通过网页结构来解析需要的数据,在网页结构变换后,爬虫往往无法在原本的网页位置找到原本需要的内容。(6)通过账号权限反爬部分网站需要登录才能继续操作,部分网站虽然并不是为了反爬虫才要求登录操作,但确实起到了反爬虫的作用。例如微博查看评论就需要登录账号,或者QQ邮箱等。1.1.6反反爬策略通过发送模拟User-Agent来通过检验,将要发送至网站服务器的请求的User-Agent值伪装成一般用户登录网站时使用的User-Agent值。发送模拟User-Agent01通过备用IP测试网站的访问频率阈值,然后设置访问频率比阈值略低。这种方法既能保证爬取的稳定性,又能使效率又不至于过于低下。调整访问频度02使用IP代理,更换爬虫IP;通过算法识别验证码;使用cookie绕过验证码。验证码校验03只爬取一次时,在其网站结构调整之前,将需要的数据全部爬取下来;使用脚本对网站结构进行监测,结构变化时,发出告警并及时停止爬虫。应对网站结构变化04通过模拟登录的方法进行规避,往往也需要通过验证码检验。账号权限限制05通过代理进行IP更换可有效规避网站检测,需注意公用IP代理池是网站重点监测对象。代理IP规避061.2HTML基础1.2.1HTML概念HTML(HyperTextMarkupLanguage,超文本标记语言)使用起来比较简单,功能强大,具有可扩展性、平台无关性、通用性的特性。它使用标签的形式描述网页的内容,因此,HTML并不是一种编程语言,而是一种标记语言。网页本身就是一个文本文件,通过在文本文件中加入特定标记,让浏览器能够快速、顺序地识别网页内容。1.2.2HTML页面基本结构任务实施查看百度首页的robots.txt协议步骤1:打开浏览器,输入网址步骤2:根据如下图显示,判断百度网站中哪些内容可以被爬取,哪些内容不允许被爬取。思政点通过对淘宝和京东网站的robots协议分析,引起学生对网络爬虫合法性的关注。通过介绍全国首例“爬虫技术”犯罪案增强学生法律意识和职业道德操作。通过校园风景组图爬取,高考录取分数爬取、讲座信息爬取激发学生爱校之情及努力学习的热情。任务小结通过学习了解爬虫及其基本原理。掌握判断爬取内容的robots.txt协议。能够遵守法律法规,合法有序地爬取数据。任务二:使用浏览器
开发者工具
任务描述从浏览器输入网址到获取网页内容,这期间发生了什么呢?其实爬虫即是模拟浏览器上网的过程,实际模拟的是整个HTTP的通信过程。HTTP和HTTPS协议都属于计算机网络中的应用层协议,其下层是基于TCP协议实现的,TCP协议属于计算机网络中的传输层协议,包括建立连接时的三次握手和断开时的四次挥手等过程。在爬虫中,我们抓取的页面通常都是基于HTTP和HTTPS协议的。任务目标掌握URL的基本格式0201了解HTTP基本原理与通信过程了解HTTP的无状态0403掌握请求与响应的基本构成2.1.1HTTP基本原理URI:UniformResourceIdentifier,即统一资源标志符URL:UniversalResourceLocator,即统一资源定位符0102URI和URL2.1.1URN、URL和URI的关系URL是URI的子集,也就是说每个URL都是URI,但不是每个URI都是URL。那么,怎样URI不是URL呢?URI还包括一个子类叫作URN,它的全称为UniversalResourceName,即统一资源名称。URN只命名资源而不指定如何定位资源,比如urn:isbn:0451450523指定了一本书的ISBN,可以唯一标识这本书,但是没有指定到哪里定位这本书,这就是URN、URL和URI的关系。
2.1.1URL基本组成格式2.1.1HTTP和HTTPS2)HTTPS1)HTTPHypertextTransferProtocol,超文本传输协议,由IETF与W3C制定规范,其作用是把超文本数据从网络传输到本地浏览器,能保证高效而准确地传输超文本文档。它是服务器与客户端进行数据交互的一种形式。HypertextTransferProtocoloverSecureSocketLayer,即以安全为目标的HTTP通道。我们可以理解为HTTP的安全版,即在HTTP下加入SSL层。HTTP和HTTPS(应用层协议)02012.1.1HTTP请求过程直观感受:在浏览器地址栏中输入URL,按下回车键后便可观察到对应页面内容2.1.2请求与响应
请求方法请求的网址请求头请求体(RequestURL)(RequestMethod)(RequestHeaders)(RequestBody)1)请求方法(RequestMethod)GET方法用于从服务器请求数据,通常用于获取资源,不会对服务器数据产生影响。POST方法用于向服务器提交数据,通常用于创建或更新资源,会对服务器数据产生影响。GET方法POST方法1)
请求方法(RequestMethod)GET和POST的区别①GET请求中的参数包含在URL里面,数据可以在URL中看到;POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中;②GET请求提交提交的数据最多只有1024字节,POST方式则没有限制;2)请求头(RequestHeaders)①Host-用于指定请求资源的主机IP和端口号1②Cookie-网站为了辨别用户,进行会话跟踪而存储在用户本地的数据,主要功能是维持当前访问会话2③Referer-用于标识请求是从哪个页面发过来的3④User-Agent-简称UA,一个特殊的字符串头,可以使用服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。(请求载体的身份标识)4常用请求头信息:3)请求的网址(RequestURL)用于明确客户端希望访问的服务器资源位置。在网络通信中,当浏览器或爬虫程序向服务器发送请求时,RequestURL就像一个地址,指引服务器找到并返回对应的资源,如网页、图片、数据文件等。4)请求体(RequestBody)请求体(RequestBody)是HTTP请求中的重要组成部分,承载着客户端向服务器发送的额外数据,它在网络爬虫和网页交互中发挥着关键作用。请求体是HTTP请求中用于携带数据的部分,主要在POST、PUT等请求方法中发挥作用。与GET请求不同,POST请求将数据放在请求体中,而非URL里,这样既可以传输大量数据,又能避免敏感信息暴露在URL中。2.1.2响应的三部分(ResponseStatusCode)响应状态码(ResponseHeaders)响应头(ResponseBody)响应体2.1.2响应的三部分表示服务器的响应状态,例如:202:服务器正常响应,404:页面未找到,500:服务器内部发生错误响应状态码(ResponseStatusCode)1是HTTP响应中的核心部分,承载着服务器返回给客户端的实际数据内容,在网络交互和爬虫开发中至关重要。响应体(ResponseBody)2服务器在HTTP响应中发送回客户端的附加信息,它包含了关于响应的各种元数据,对于客户端正确处理响应内容、优化性能以及了解服务器状态等方面起着关键作用。响应头(ResponseHeaders)32.1.2响应的三部分包含服务器的信息,例如名称、版本号等Server用于指定响应内容的编码Content-Enconding文档类型,指定返回的数据是什么类型(text/html)Content-Type设置Cookie,响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上Set-Cookie用于指定响应的过期时间Expires常用的响应头信息2.2HTTP无状态HTTP协议对事务的处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态,服务器不会记录前后状态的变化,也就是缺少状态记录,之后如果需要处理前面的信息,客户端就必须重传,导致需要额外传递一些重复请求,才能获取后续响应。那么,我们如何解决这种无状态呢?任务实施步骤1:打开浏览器,访问百度首页。访问百度首页,观察发送和请求过程任务实施
步骤2:右键选择“检查”菜单(或者直接按快捷键F12)即可打开浏览器开发者工具。如下图所示:任务实施步骤3:切换到网络面板,然后重新刷新页面,即可看到下面出现很多个条目,其中一个条目就代表一次发送请求和接收响应的过程。如下图:任务小结能够正确搭建基础通过学习了解HTTP基本原理及HTTP无状态。爬虫环境。掌握URL基本组成格式。掌握请求与响应的基本构成。任务三:爬取百度首页
任务描述一个爬虫的基本功能是读取URL和抓取网页内容,这就需要爬虫具备能够实现HTTP请求的功能。请求过程包括生成请求、请求头处理、超时设置、请求重试、查看状态码等。通过本任务学习,同学们通过Requests库实现向百度发送GET类型的HTTP请求,并获取百度首页的HTML源代码。任务目标掌握Python爬虫库的安装及使用方法0201了解并搭建基于Python的爬虫环境单击此处添加文本具体内容,文字是您思想的提炼,请尽量简明扼要地阐述您的观点。0403能够使用requests库发起简单请求3.1搭建基础爬虫环境另外一个比较流行的开发环境是Anaconda。Anaconda比较庞大,但却是一个十分强大的Python开发环境。它自带Python的解释器,也就是说,安装Anaconda时会自动
Python。同时,Anaconda带有一个功能强大的IDE一Spyder。Anaconda最大的优点之一是可以帮助用户找到Python的各种库,从而使得Python的开发十分方便与高效。同学们可以到官网下载Anaconda。3.AnacondaPython的开发环境十分简单,安装完成后启动Python,即可看到Python的命令行窗口。这个环境是命令行环境,只能运行一些简单的测试语句,不能用来编写程序。另外也可以启动Python自带的IDE,但是这个IDE的功能十分有限,不适合开发Python工程项目。1.Python自带的开发环境一个比较流行的开发环境是PyCharm,它是专门为Python开发的IDE,具有很多功能,如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等。2.PyCharm020103主流的开发环境3.1.1基础HTTP库
支持异步请求的HTTP库,兼容requests的API,支持HTTP/2和WebSocket,适用于高性能的异步网络请求场景。Python中最常用的HTTP库,提供简洁的API,支持HTTP/1.1和HTTP/2协议,广泛应用于网络爬虫、API调用等场景。Python标准库中的HTTP库,包含多个模块,功能全面但使用较为复杂,适合对HTTP协议有深入理解的开发者。urllibhttpxrequests3.1.1基础HTTP库
①urllib在Python2.x版本中有urllib库和urllib2库;在Python3.x版本中把urllib库和urllib2合成为一个urllib库;urllib3库是在Python3.x版本中新增的第三方扩展库urlliburllib、urllib2、urllib3、requests区别②urllib2是Python2.x的http访问库,是Python的内置标准库;urllib库同样是Python的内置标准库urllib2③urllib3是一个基于Python3.x版本的功能强大、友好的HTTP访问库,许多Python的原生系统已经开始使用urllib3库,其提供了许多Python标准库里没有的重要特性urllib3④requests库是第三方http访问库,需要安装requests3.1.2urllib可以实现HTTP请求的发送,而且不需要关心HTTP协议本身甚至更底层的实现,我们要做的是指定请求URL、请求头、请求体等信息,还可以把服务器返回的响应转化为Python对象,通过该对象可以方便地获取响应的相关信息,如响应状态码、响应头、响应体等。Python内置的HTTP请求库,不需额外安装,可直接使用。
02013.2.2urllib的使用①request:最基本的HTTP请求模块,可以模拟请求的发送(就像在浏览器里输入网址然后回车,只需要给库方法传入URL以及参数,即可模拟)。urllib库包含四个模块:②error:异常处理模块(如果出现请求异常,可以捕获异常,然后进行重试或其他操作以保证程序运行不会意外终止)。④robotparser:主要用来识别网站的robots.txt文件,然后判断哪些能爬,哪些不能爬(用得较少)0204③parse:工具模块,提供了许多URL的处理方法(拆分、解析、合并等)。01033.1搭建基础爬虫环境1、urllib.request模块(发送请求)
提供了最基本的构造HTTP请求的方法,利用这个模块可以模拟浏览器的请求发起过程,同时还具有处理授权验证(Authentication)、重定向(Redirection)、浏览器Cookie以及其他一些功能。具体用法:①urlopen
最基本的方法,可以完成简单的网页的GET请求抓取。
实例:以淘宝为例,抓取网页——输出HTML源代码3.1搭建基础爬虫环境urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)data参数:可选,在添加该参数时,需要使用bytes方法将参数转化为字节流编码格式的内容,即bytes类型,另外,如果传递了这个参数,那么它的请求方式就不再是GET,而是POST。timeout参数:用于设置超时时间,单位为秒,即超出时间无响应即抛出异常urlopen方法的API:3.1搭建基础爬虫环境实例:站点可提供HTTP请求测试。3.1搭建基础爬虫环境②Request类(构造请求)3.1搭建基础爬虫环境实例:传入多个参数尝试构造Request类方法一:headers参数3.1搭建基础爬虫环境方法二:使用add_headers方法添加headers3.1搭建基础爬虫环境2、Error模块-异常处理(由request模块产生的异常)①URLError类-继承自OSError类,是Error异常模块的基类。—具有一个属性reason,即返回错误的原因实例【1-1】:URLError3.1搭建基础爬虫环境②HTTPError
URLError的子类,专门用来处理HTTP请求错误,如认证失败。注:有时候,reason属性返回的不一定是字符串,也可能是一个对象。3.1搭建基础爬虫环境3、urllib.parse模块(解析链接)①urlparse-实现URL的识别和分段实例【1-2】:urlparse3.1搭建基础爬虫环境②urlunparse--构造URL(接收的参数是一个可迭代对象,长度必须是6)实例【1-3】:urlunparse3.1搭建基础爬虫环境③urlsplit-与urlparse方法非常相似,但不再单独解析params这一部分(合并到path中)实例【1-4】:urlsplit3.1搭建基础爬虫环境④urlunsplit-与urlunparse类似,唯一区别:长度必须是5。实例【1-5】:urlunsplit3.1搭建基础爬虫环境⑤urljoin-链接合并(基础链接+新链接)—会分析基础链接的scheme、netloc和path这三个内容,并对新链接缺失的部分进行补充实例【1-6】:urljoin⑥urlencode-构造GET请求参数时常用实例【1-7】:urlencode3.1搭建基础爬虫环境3.1搭建基础爬虫环境⑦parse-qs-反序列化(将一串GET请求参数转回字典)
实例【1-8】:parse-qs⑧parse-qsl-用于将参数转化为由元组组成的列表
实例【1-9】:parse-qsl3.1搭建基础爬虫环境3.1搭建基础爬虫环境⑨quote-可以将内容转化为URL编码的格式
实例【1-10】:quote3.1搭建基础爬虫环境⑩unquote-进行URL解码
实例【1-11】:unquote3.1搭建基础爬虫环境②read-读取robots.txt文件并进行分析(如果不调用这个方法,接下来的判断都会为False,记得调用)02①set-url-用来设置robots.txt文件的链接(如果在创建RobotFileParser对象时传入了链接,那么就不需要再使用这个方法设置了)01③parse-用来解析robots.txt文件(传入的参数是robots.txt某些行的内容,它会按照robots.txt的语法规则来分析)034、urllib.robotparser模块(解析robots.txt文件)3.1搭建基础爬虫环境1、Requests库1、urllib库与Requests库对比
实例【1-12】:get请求2、Requests库使用1)GET请求实例【1-13】:get请求--返回相应的请求信息3.1搭建基础爬虫环境3.1搭建基础爬虫环境实例【1-14】:利用params参数为get请求附加信息3.1搭建基础爬虫环境
实例【1-15】:抓取网页3.1搭建基础爬虫环境注:前面的实例未设置请求头,这样的话,某些网站会发现这不是一个由正常浏览器发起的请求,于是可能会返回异常结果导致网页抓取失败。②抓取二进制数据
实例【1-16】:抓取二进制数据实例【1-17】:二进制抓取图片3.1搭建基础爬虫环境③添加请求头(使用headers参数)
实例【1-18】:添加请求头2)POST请求
实例【1-19】:POST请求3.1搭建基础爬虫环境3)响应实例【1-20】:响应任务实施使用Requests库发起简单请求步骤1:安装Requests库—pipinstallrequests任务实施步骤2:正确添加请求头并发起简单get请求(请求百度首页)并返回相应的请求信息。任务实施步骤3:抓取百度首页logo并存储到本地。任务小结能够正确搭建基础爬虫环境。通过学习掌握爬虫基本库及Requests库的使用方法。能够使用爬虫库实现简单的请求和抓取。项目二:爬取豆瓣电影网站目录01任务1使用正则表达式02任务2:使用Xpath爬取豆瓣电影排行榜03任务3:使用BeautifulSoup爬取豆瓣电影TOP250任务1:使用正则表达式
任务描述
初次爬取的网页数据大多是以HTML源代码形式返回到我们的爬虫程序中的,当我们需要从爬取到的源代码中获取到具体所需数据时,就需要用到相应的解析工具了,正则表达式就是众多解析工具中的一个。正则表达式在引入re模块后以字符串前加r的形式存在,通过正则表达式的特殊字符就可以从杂乱的数据中获取到所需的数据。任务目标
了解正则表达式的基本格式0201了解正则表达式的基本概念使用re输出文章中的指定内容0403了解特殊字符的作用1.1.1正则表达式基本概念
正则表达式是一种用于匹配和操作文本的工具,它是由一系列字符和特殊字符组成的字符,用于描述要匹配的文本字符。
正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。1.1正则表达式概述1.1正则表达式概述1.1.2常用匹配规则:1.2常用匹配方法1.2.1match方法传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串;规则:从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None;实例演示:字符串匹配—输出结果:Match对象
group方法:输出匹配到的内容
span方法:输出匹配的范围练习:练习:
对给定字符串进行匹配要求:
使用正则表达式进行匹配,只提取到电话号码结束,并输出匹配范围待匹配字符串:
MyphonenumberindmynameisPenny1.2常用匹配方法思考:刚才我们用match方法可以得到匹配到的字符串内容,如果想从字符串中提取一部分内容,怎么办?(1)匹配目标—使用括号()将想提取的子字符串括起来1.2常用匹配方法(2)通用匹配—.*—“.”可以匹配任意字符(除换行符)
—“*”代表匹配前面的字符无限次—“.”与“*”组合
匹配任意字符1.2常用匹配方法(3)贪婪与非贪婪①贪婪匹配
—.*会匹配尽可能多的字符②非贪婪匹配—.*?
—尽可能匹配少的字符
1.2常用匹配方法③修饰符
—用一些可选标志修饰符来控制匹配的模式
—实例演示,观察输出结果
AttributeError常用修饰符re.I:使匹配对大小写不敏感re.L:做本地化识别(locale-aware)匹配re.M:多行匹配,影响^和$re.S:使匹配包括换行在内的所有字符re.U:根据Unicode字符集解析字符。这个标志影响\w、\W、\b、和\Bre.X:该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解注:在网页匹配中,较为常用的有re.S和re.I1.2常用匹配方法④转义匹配—当遇到用于正则匹配模式的特殊字符时,在前面加反斜线转义一下即可思考:match方法在使用时需要考虑到开头的内容,这在做匹配时并不方便。它更适合用来检测某个字符串是否符合某个正则表达式的规则。如果想要得到匹配内容,怎么办?
1.2常用匹配方法
1.2.2search方法—匹配时会扫描整个字符串,然后返回第一个成功匹配的结果—规则:在匹配时,search方法会依次扫描字符串,直到找到
第一个符合规则的字符串,然后返回匹配内容,如果
搜索完了还没有找到,就返回None。1.2常用匹配方法用法实例:
给定一段待匹配的HTML文本
①提取class为active的li节点内部的超链接包含的歌
手名和歌名
②不加active(也就是匹配不带class为active的节点
内容)
③去掉re.S1.2常用匹配方法1.2.3findall方法—搜索整个字符串,然后返回匹配正则表达式的所有内容—实例:
①获取所有a节点的超链接、歌手和歌名
②获取所有li节点的歌名—返回结果列表类型(需要遍历来依次获取每组内容)
列表中元素:元组类型索引依次取出1.2常用匹配方法1.2.4sub方法—修改文本(去掉节点)—实例引入:去掉文本中的数字—实例用法:
①用sub方法将a节点去掉,只留下文本
②利用findall提取1.2常用匹配方法1.2.5compile方法—将正则字符串编译成正则表达式对象,以便在后面的匹配中
复用(给正则表达式做了一层封装)—实例用法:分别将3个日期中的时间去掉
①借助compile方法将正则表达式编译成一个正则表达
式对象
②借助sub方法思政引导★
思政引导:随着我国数字经济的发展,数据已经成为重要的生产要素。掌握网络爬虫技术不仅是技术能力的体现,更应服务于人民、服务于社会。我们应当践行“技术向善”的理念,推动优秀国产影视文化的传播,增强文化自信。任务小结
本任务围绕正则表达式的常用匹配方法,分任务逐步实现了使用正则表达式获取与解析数据的方法。
掌握了使用正则表达式提取网页中目标数据项的基本能力。
熟悉了基本静态网页的结构,了解了基础反爬机制与应对方式。
初步形成“技术应用需守法有德”的信息素养观,增强了学生对数据使用合规性的重视。任务2:使用Xpath爬取豆瓣电影排行榜
任务描述豆瓣电影是国内知名的电影信息平台,上面汇聚了丰富的电影数据,包括电影的基本信息(如名称、评分、导演、主演等)、影评、用户评价等。通过使用Xpath技术从豆瓣电影页面中爬取这些数据,能够为电影数据分析、电影推荐系统开发、电影市场研究等提供基础数据支持。任务目标了解常用XPath表达式0203使用XPath解析网页01正确安装XPath库2.1XPath概述2.1.1XPathXPath—全称XMLPathLanguage,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。2.1.2相应库的安装在pycharm的命令行界面输入pipinstalllxml进行库的安装。2.1XPath概述2.1.3XPath常用规则表达式描述/从当前节点选取直接子节点//从当前节点开始选取子孙节点.选取当前节点@选取属性Text()获取文本*通配符,表示任何元素节点Nodename[@atttib='value'选取具有给定值的指定元素例:div[@class='text']表示class为text的所有div元素。实例导入lxml库的etree模块声明HTML文本未闭合调用HTML类进行初始化,成功构造了一个XPath解析对象调用tostring方法输出修正后的HTML代码输出结果:li节点标签被补全,并且还自动添加了body、html节点2.2XPath基本用法1、获取所有节点—用//开头的XPath规则来选取所有符合要求的节点返回结果:
列表形式,元素:Element对象+节点名称返回结果:列表形式,元素:Element对象
可用“中括号加索引”方式提取2.2XPath概述2、获取子节点—通过/或//即可查找元素的子节点或子孙节点
思考:如使用//div/span,结果会有什么变化?
注:/和//的区别/用于获取直接子节点,//用于获取子孙节点2.2XPath概述3、获取父节点—用“..”或“parent::”来实现
2.2XPath概述4、属性匹配—选取节点的时候,可使用“@”符号进行属性过滤
2.2XPath概述5、文本获取—用“text”方法获取节点中的文本
注意:
①如果要想获取子孙节点内部的所有文本,可以直接用
//text方法的方式,这样可以保证获取到最全面的文本
信息,但是可能会夹杂一些换行符等特殊字符
②如果想获取某些特定子孙节点下的所有文本,可以先选
取到特定的子孙节点,然后再调用text方法方法获取其
内部文本,这样可以保证获取的结果是整洁的
2.2XPath概述6、属性获取—使用“@”符号
注:与属性匹配方法的不同
①属性匹配是中括号加属性名和值来限定某个属性
②属性获取是指获取节点的某个属性
2.2XPath概述7、属性多值匹配—使用contains方法
修改后:
使用contains方法:
参数1:属性名称
参数2:属性值2.2XPath概述8、多属性匹配—运用运算符“and”连接多个属性
2.2XPath概述9、按序选择—利用中括号传入索引的方法获取特定次序的节点
注:中括号中传入数字和代码中不同,序号以1开头,不是以0开头2.2XPath概述10、节点轴选择
—XPath提供了很多节点轴选择方法,包括获取子元素、兄弟元素、父元素、祖先元素等。
2.3任务实施使用XPath获取豆瓣电影步骤1:分析网站结构2.3任务实施使用XPath获取豆瓣电影排行榜步骤2:确定目标数据项2.3任务实施使用XPath获取豆瓣电影步骤3:使用Xpath表达式获取相应数据任务小结通过学习了解Xpath常用规则。掌握使用Xpath表达式获取数据的方法。能够遵守法律法规,合法有序地爬取数据。任务3:使用BeautifulSoup获取豆瓣电影TOP250
任务描述豆瓣电影拥有丰富的电影信息资源,包括电影的基本详情、用户评分与评价、影片类型等。上一个任务我们使用Xpath实现了对豆瓣电影排行榜中数据的提取,此次我们应用BeautifulSoup这一更强大的解析工具,
来实现对豆瓣电影top250榜单数据的爬取任务。任务目标正确安装BeautifulSoup0203了解BeautifulSoup的简单使用01认识BeautifulSoup3.1.1BeautifulSoup基本概念Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据,即借助网页的结构和属性等特性来解析网页(工具箱)。它可以自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码,不需要考虑编码方式,除非文档没有指定一个编码方式,仅仅需要说明一下原始编码方式就可以了。3.1BeautifulSoup概述3.1BeautifulSoup概述3.1.2BeautifulSoup的安装在pyechram的命令行界面输入
pip3installbeautifulsoup4
进行安装3.1BeautifulSoup概述BeautifulSoup在解析时实际上依赖解析器,它除了支持Python标准库中的HTML解析器外,还支持一些第三方解析器(比如lxml)BeautifulSoup支持的解析器推荐使用,lxml解析器:速度快,容错能力强实例未闭合把要解析的字符串以标准的缩进格式输出输出HTML中title节点的文本内容解析器的类型完成不完整的HTML自动格式更正初始化3.2BeautifulSoup基本用法3.2.1节点选择器
—直接调用节点的名称就可以选择节点元素,再调用string属性就可以得到节点内的文本了,这种选择方式速度非常快。如果单个节点结构层次非常清晰,可以选用这种方式来解析。
注:当有多个节点时,这种选择方式只会选择到第一个匹配的节点,其他的后面节点都会忽略。3.2BeautifulSoup基本用法3.2.2提取信息
1、获取名称—利用name属性可以获取节点的名称
3.2BeautifulSoup基本用法
2、获取属性—调用attrs获取所有属性
方法一:
3.2BeautifulSoup基本用法
方法二:直接在节点元素后面加中括号,传入属性名
注:返回结果:
字符串(值唯一)
字符串组成的列表(值不唯一)3.2BeautifulSoup基本用法3、获取内容—利用string属性获取节点元素包含的文本内容3.2BeautifulSoup基本用法4、嵌套选择—Tag类型对象同样可以继续调用节点进行下一步的选择
注:在Tag类型的基础上再次选择得到的依然还是Tag类型
3.2BeautifulSoup基本用法3.2.3关联选择
—先选中某一个节点元素,然后以它为基准再选择它的子节点、父节点、兄弟节点等1、基于属性选择1)子节点和子孙节点
情况1:选取节点元素之后,想要获取它的直接子节点-调用contents属性
结果:列表形式(contents属性得到的结果是直接子节点的列表)3.2BeautifulSoup基本用法情况2:调用children属性来选择,返回结果是生成器类型3.2BeautifulSoup基本用法情况3:要得到所有的子孙节点的话,可以调用descendants属性结果:生成器(descendants会递归查询所有子节点,得到所有的子孙节点)3.2BeautifulSoup基本用法2)父节点和祖先节点情况1:获取某节点的直接父节点
3.2BeautifulSoup基本用法情况2:获取所有的祖先节点
3.2BeautifulSoup基本用法3)兄弟节点(同级节点)
3.2BeautifulSoup基本用法4)提取信息
单个节点:直接调用string、attrs等属性获得其文本和属性
多个节点的生成器:转为列表后取出某个元素,然后再调用string、attrs等
属性获取其对应节点的文本和属性3.2BeautifulSoup基本用法2、方法选择器1)find_all—查询所有符合条件的元素
API:find_all(name,attrs,recursive,text,**kwargs)
实例一:name—根据name参数来查询元素(节点名称)
3.2BeautifulSoup基本用法实例二:attrs—传入属性进行查询
①attrs参数为字典类型
②直接传入参数
3.2BeautifulSoup基本用法实例三:String—用来匹配节点的文本,传入的形式可以是字符串,也可以是正则表达式对象
3.2BeautifulSoup基本用法2)find—查询符合条件的元素,返回单个元素,即第一个匹配的元素
3.2BeautifulSoup基本用法3)其他查询方法—与前面方法区别在于查询范围不同
find_parents和find_parent:前者返回所有祖先节点,后者返回直接父节点。
find_next_siblings和find_next_sibling:前者返回后面所有的兄弟节点,后者返回后面第一个兄弟节点。
find_previous_siblings和find_previous_sibling:前者返回前面所有的兄弟节点,后者返回前面第一个兄弟节点。find_all_next和find_next:前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点。find_all_previous和find_previous:前者返回节点前所有符合条件的节点,后者返回第一个符合条件的节点。
3.2BeautifulSoup基本用法3、CSS选择器—调用select方法,传入相应的CSS选择器即可实例3.2BeautifulSoup基本用法嵌套选择
3.2BeautifulSoup基本用法获取属性3.2BeautifulSoup基本用法获取文本方法一:string属性方法二:get_text
3.3任务实施-使用BeautifulSoup的爬取豆瓣电影top250步骤1:分析网站结构,确定目标数据项3.3任务实施-使用BeautifulSoup的爬取豆瓣电影top250步骤2:分析翻页逻辑首先我们对比第一页和第二页的url。我们会发现在第二个URL的?后面多了两个参数,对比网页数据,可以看出每一页电影的开始编号对应着start参数的数字。3.3任务实施-使用BeautifulSoup的爬取豆瓣电影top250步骤3:定义爬取方法并使用BeautifulSoup获取目标数据项步骤4:运行程序并输出结果任务小结通过学习了解BeautifulSoup常用方法。掌握使用BeautifulSoup中不同方法灵活获取目标数据的能力。能够遵守法律法规,合法有序地爬取数据。实现某招聘网站的数据爬取并存储目录01任务1爬取岗位信息并存储为文本文件02任务2:爬取薪资信息并存储到MySQL03任务3:爬取工作地点并存储到MongoDB任务一
爬取岗位信息并存储为文本文件
2、json文件存储3、csv文件存储1、txt文件的存储任务目标任务一
爬取岗位信息并存储为文本文件1.1TXT文本文件存储—操作简单,但不利于检索方法一:open方法(省去requests异常处理部分)任务一
爬取岗位信息并存储为文本文件方法二:withas语法(不需要再调用close方法)常用文件打开方式任务一
爬取岗位信息并存储为文本文件1.2JSON文本文件存储JSON—全称为JavaScriptObjectNotation,也就是JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。实例:将字符串转为JSON对象运行结果?列表(可操作的数据结构)JSON形式的字符串双引号任务一
爬取岗位信息并存储为文本文件JSON读取
Python为我们提供了简单易用的JSON库来实现JSON文件的读写操作,我们可以调用JSON库的loads方法将JSON文本字符串转为JSON对象,可以通过dumps()方法将JSON对象转为文本字符串。
注:JSON字符串的表示需要用双引号,否则loads方法会解析失败任务一
爬取岗位信息并存储为文本文件JSON输出调用dumps方法将JSON对象转化为字符串(如果想保存JSON的格式,可以再加一个参数indent,代表缩进字符个数,若JSON对象中包含中文字符,可指定参数ensure_ascii为False)任务一
爬取岗位信息并存储为文本文件1.3CSV文本文件存储全称为Comma-SeparatedValues,中文可以叫作逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据,它是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分隔。每条记录由字段组成(结构化表的纯文本形式)实例:CSV文件写入写入的文本默认以逗号分隔,调用一次writerow方法即可写入一行数据任务一
爬取岗位信息并存储为文本文件实例:delimiter参数(修改列与列之间的分隔符)任务一
爬取岗位信息并存储为文本文件实例:写入多行(调用writerows方法同时写入多行)注:此时参数需要为二维列表任务一
爬取岗位信息并存储为文本文件实例:写入字典(将字典写入CSV文件中)任务一
爬取岗位信息并存储为文本文件实例:追加写入(将open函数的第二个参数改成a)注:
如果要写入中文内容的话,可能会遇到字符编码的问题,此时需要给open参数指定编码格式任务一
爬取岗位信息并存储为文本文件实例:to_csv方法写入文件(需安装pandas库)任务一
爬取岗位信息并存储为文本文件实例:使用csv库来读取CSV文件注:如果CSV文件中包含中文,还需要指定文件编码任务一
爬取岗位信息并存储为文本文件实例:使用read_csv库方法读取任务实施爬取智联招聘网站中“数据采集”分类中的岗位名称,并将其保存为CSV文本文件步骤1:分析网站结构任务实施步骤2:确定目标数据项任务实施步骤3:使用BeautifulSoup获取相应数据并存储为CSV文件任务小结通过学习了解文本文件的存储及读取方法。掌握存储为不同类型文本文件的方法。能够遵守法律法规,合法有序地爬取数据。任务二
爬取薪资信息并存储到MySQL
3、能实现对MySQL数据库中的数据进行增删改查2、掌握pymysql库的基本使用1、会安装Pymysql库任务目标任务二
爬取薪资信息并存储到MySQL2.1准备工作-pymysql库安装在命令提示符界面输入pipinstallpymysql进行库的安装。任务二
爬取薪资信息并存储到MySQL2.2连接并创建数据库假定:当前的MySQL运行在本地,用户名为root,密码123456,运行端口为3306步骤:①通过pymysql的connect方法声明一个MySQL连接对象db②连接成功后,需要再调用cursor方法获得MySQL的操作游标(利用游标来执行SQL语句)
③调用execute方法执行
④创建数据库
⑤连接并创建成功后进行验证任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL2.3创建表—执行创建表的SQL语句
创建一个数据表job:注:在爬虫爬取的过程中,我们会根据爬取结果设计特定的字段任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL2.4插入数据—通过字典插入(构造动态的SQL语句)构造插入的字段:将data的键名拿过来并用逗号隔开构造多个%s当作占位符(长度未1的数组用乘法扩充)任务二
爬取薪资信息并存储到MySQL利用字符串的format方法将表名、字段名和占位符构造出来需要使用commit方法提交才能生效任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL2.5更新数据—去重的方法(如果数据存在,就更新,不存在就插入)如果主键已经存在,就执行更新操作任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL2.6删除数据—DELETE语句(需要指定要删除的目标表名和删除条件)要删除的表名删除条件任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL2.7查询数据—SELECT语句不再需要commit方法,调用cursor的rowcount属性获取查询结果的条数调用fetchone方法,获取结果的第一条数据(结果:元组)调用fetchall方法,得到结果的所有数据任务二
爬取薪资信息并存储到MySQL任务二
爬取薪资信息并存储到MySQL思考:
从刚才的实例运行结果可以看到,调用fetchall方法,得到了9条数据而不是10条,为什么?原因:
它的内部实现有一个偏移指针用来指向查询结果,最开始偏移指针指向第一条数据,取一次之后,指针偏移到下一条数据,这样再取的话,就会取到下一条数据了。我们最初调用了一次fetchone方法,这样结果的偏移指针就指向下一条数据,fetchall方法返回的是偏移指针指向的数据一直到结束的所有数据,所以该方法获取的结果就只剩9个了注:fetchall会将结果以元组形式全部返回,如果数据量很大,那么占用的开销会非常高推荐:用while循环加fetchone方法来获取所有数据任务实施爬取智联招聘网站中“数据采集”分类中的薪资信息,并将其存储至MySQL数据库中任务小结通过学习了解MySQL中的数据操作。掌握如何将数据在MySQL中增删改查的方法。能够遵守法律法规,合法有序地爬取数据。任务三
爬取工作地点并存储到MongoDB
3、能实现对MySQL数据库中的数据进行增删改查2、掌握pymysql库的基本使用1、学会安装pymongo库任务目标任务三
爬取工作地点并存储到MongoDB3.1准备工作-pymongo库安装在命令提示符界面输入
pipinstallpymongo进行库的安装。任务三
爬取工作地点并存储到MongoDB3.2连接MongoDB
假定:当前的MongoDB运行在本地,运行端口为27017
使用PyMongo库里面的MongoClient方法,传入IP以及端口任务三
爬取工作地点并存储到MongoDB3.3指定数据库3.4指定集合(声明了一个集合对象)任务三
爬取工作地点并存储到MongoDB3.5插入数据—以字典形式表示
在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。实际上,在PyMongo3.x版本中,官方已经不推荐使用insert()方法了。官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录。插入单条数据insert_one()任务三
爬取工作地点并存储到MongoDB任务三
爬取工作地点并存储到MongoDB
插入多条数据—insert_many()列表任务三
爬取工作地点并存储到MongoDB3.6查询数据—利用find_one()或find()方法进行查询find_one():返回单个结果find():返回生成器对象,通过遍历能获取所有结果(每个结果都是字典类型)任务三
爬取工作地点并存储到MongoDB
查询条件
1)比较查询—比较符号
2)正则匹配查询—功能符号任务三
爬取工作地点并存储到MongoDB3.7排序—直接调用sort()方法,并在其中传入排序的字段及升降序标志即可3.8偏移—某些情况下,只取某几个元素,利用skip()方法偏移几个位置任务三
爬取工作地点并存储到MongoDB3.9更新—使用update()方法,指定更新条件和更新后的数据即可
这里也分为update_one()方法和update_many()方法,用法更加严格,它们的第二个参数需要使用$类型操作符作为字典的键名。任务三
爬取工作地点并存储到MongoDB3.10删除—直接调用remove()方法指定删除的条件即可
任务实施爬取智联招聘网站中“数据采集”分类中的工作地点信息,并将其存储至MongoDB数据库中任务小结通过学习了解MongoDB中的数据操作。掌握如何将数据在MongoDB中增删改查的方法。能够遵守法律法规,合法有序地爬取数据。实现个人微博的爬取目录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分析方法(需借助浏览器的开发者工具)
首先,用浏览器打开链接,随后在页面鼠标右键,从弹出的快捷菜单中选择“检查”选项,此时便会弹出开发者工具任务一
使用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实现目标微博的爬取任务小结通过学习了解Ajax基本原理。掌握Ajax的基本分析及结果提取方法。能够遵守法律法规,合法有序地爬取数据。任务二:使用Seleniu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新公司人力资源外包合同
- 企业跟员工签订外包合同
- 塘厦酒店劳务外包合同
- 装潢工地保洁外包合同
- 广告设计制作外包合同
- 电动摩托车技术外包合同
- 中交三公局劳务外包合同
- 超市生鲜水果外包合同
- 行政事业绩效外包合同
- 阳春工商劳务外包合同
- (期末)测试卷2025-2026学年统编版七年级下册历史
- 2026年安全生产月活动启动部署和主题宣贯课件附讲义教案和案例
- 2026年“全国安全生产月活动”《安全知识》竞赛题库(附含答案)
- GB/T 31458-2026医院安全防范要求
- 新里程大学英语听说教程谭思坦课后部分参考答案
- 生产经营单位生产安全事故应急预案编制导则课件
- 部编版小学语文五年级下册期末测试卷(含答案)
- PLC技术应用(第二版)项目6 plc控制灯光闪烁教案电子教案
- 石油建设安装工程预算定额计算规则-个人精校版
- 重庆大学本科学生毕业设计塑料瓶理瓶机设计(机械cad图纸)
- 物业设备设施年度保养工作计划表
评论
0/150
提交评论