导图社区 爬虫
爬虫基础导图,包括网络爬虫概述、HTTP基础及requests库、数据解析、持久化存储、Ajax与selenium等知识点,非常实用,值得收藏。
编辑于2021-11-05 09:33:19爬虫
第一章 网络爬虫概述
网络爬虫概述
爬虫就是通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。
爬虫带来的风险:1.爬虫干扰了被访问网站的正常运营 2.爬虫抓取了受到法律保护的特定类型的数据或信息
爬虫在使用场景中的分类 :通用爬虫; 聚焦爬虫;增量式爬虫;
爬虫的矛与盾
反爬机制: 门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
反反爬策略:与反爬机制,相互对应;爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站中相关的数据。
robots.txt协议:网站有权规定网站中哪些内容可以被爬虫抓取,哪些内容不可以被爬虫抓取。君子协议----未利用强制的法律或技术手段来制约爬虫
网络爬虫基本原理
爬虫结构:1.种子URL;2.待抓取URL列表;3.已下载网页库;4.已抓取URL列表
网络爬虫的基本工作流程如下: 首先选取一部分精心挑选的种子URL; 将这些URL放入待抓取URL队列; 从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。 依照以上循环,直到待抓取URL列表抓取完,程序结束。
抓取策略:
深度优先遍历策略
度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个线路,继续跟踪链接。
宽度优先遍历策略
宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。
软件开发环境
第二章 HTTP基础及requests库
HTTP基本原理
HTTP基本原理-URL
我们把在浏览器的地址栏里输入的网址叫做URL。URL全称Uniform Resource Locator,即统一资源定位符。URL用于确定分散在互联网中各种资源的位置和访问方式。
HTTP协议
1.全称HyperText Transfer Protocol,即超文本传输协议。是用于从网络中传输超文本到本地浏览器的传输协议,是互联网中应用最为广泛的一种网络协议。 2.HTTP协议以明文方式发送内容,不提供任何方式的数据加密。
HTTP请求过程
1.浏览器向网站所在的服务器发送了一个请求。 2.网站服务器接收到这个请求后进行处理和解析。 3.网站服务器返回对应的响应,接着传回给浏览器。 4.响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来。
HTTP请求包含的内容
请求,由客户端向服务端发出,可以分为4部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。
Get和post的比较
1.Get重点在从服务器上获取资源,post重点在向服务器发送数据; 2.Get传输数据是通过url请求,以key(字段)=value的形式,置于url后,并用?连接,多个请求数据间用&连接,因此Get请求的数据是用户可见的;Post传输数据,是将字段与对应值封装在请求体中,这个过程用户不可见; 3.Get由于受到url长度限制,传输数据量小,但效率高;Post可以传输大量数据; 4.Get是不安全的,Post相对比于Get,安全性高; 5.Get方式只能支持ASCII字符,向服务器传送中文可能乱码;POST可以正确传输中文.
Cookie原理
一种会话跟踪机制。
HTTP是无状态的。
基本原理
1.创建Cookie:当用户第一次浏览某个使用Cookie的网站时,该网站服务器会为该用户生成一个唯一的识别码创建一个Cookie对象,当服务器返回响应给浏览器时,会将Cookie带着一同返回浏览器 2.设置存储Cookie:浏览器接收响应后,存储该Cookie对象 3.发送Cookie:用户再次访问该网站,会将Cookie附在请求中一同发送; 4.读取Cookie:服务器接收请求后,便可解析出该Cookie
Session
Session是另外一种保持HTTP连接状态的技术,Session代表服务器与浏览器的一次会话过程
Session基本原理
当用户访问服务器,服务器会为该用户创建一个Session,创建时,会检查该用户发送的请求是否已包含一个Session ID,如已包含,则按照这个Session ID找出服务器内存中已创建的该用户的Session; 若用户请求中不含Session ID,则为该用户创建一个Session并生成一个相关Session ID,而后保存到Cookie中,供后续浏览器与服务器交互使用。
网页基础
网页结构-HTML
HTML是用来描述网页的一种语言,全称叫做Hyper Text Markup Language,即超文本标记语言。网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是HTML。
网页结构-CSS
1.HTML定义了网页的结构,但是只有HTML页面的布局并不美观,可能只是简单的节点元素的排列,为了让网页看起来更好看一些,需要CSS的帮助。 2.CSS,全称叫作Cascading Style Sheets,即层叠样式表。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。
网页结构-JS
JavaScript,简称JS,是一种脚本语言。HTML和CSS配合使用,提供给用户的只是一种静态信息,缺乏交互性。我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等,这通常就是JavaScript的功劳。
Requests库介绍
查看响应内容的属性: text 属性:返回的是文本格式的数据 Content属性:返回的字节流数据 url属性:查看完整url地址 status_code:查看响应状态码
如何使用:(requests模块的编码流程) - 指定url - 发起请求 - 获取响应数据 - 持久化存储
环境安装: pip install requests
第三章:数据解析
利用python文本解析,抓取百度首页网站文字
1.百度首页HTML文档获取;2.了解文本解析所用工具;3.分析目标数据文本特点,抓取目标数据
Requests库最核心的两个类: Request:对 HTTP 请求的封装 Response:对 HTTP 返回结果的封装
三种解析数据方式: 正则表达式 Xpath BeautifulSoup
为什么要用正则表达: 正则表达式最初是在表单验证时,准确的判断一个字符串是不是某种固定格式。比如邮箱的验证、手机号的验证等。目的是避免恶意用户的乱输入,使表单的收集是我们想要的格式。 解析并获取目标数据
e.findall方法(函数):匹配所有符合规则的内容,返回包含结果的列表,若没有匹配内容,则返回空列表。
如果一个正则表达式要重复使用多次,为提高效率,应该先把这个正则先预编译好,接下来重复使用时可进行直接匹配,这就是预编译。
re.match函数:从字符串的起始位置匹配一个模式,若无该模式或不是在起始位置匹配成功,方法返回None。
re.search函数:扫描整个字符串并返回第一个成功的匹配。
匹配任意字符,换行\n除外 *:匹配前一个字符0次或无限次 ?:匹配前一个字符0次或一次 .* :贪婪模式 .*? :非贪婪模式 ():内部的数据作为结果输出
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配
使用xpath进行文本解析
最常用且最高效的一种解析方式,通用性强。
XPath概念: XPath全称XML Path Language,即XML路径语言。它是一门在XML文档中查找信息的语言。HTML与XML结构类似,也可以在HTML中查找信息。
XPath特性: XPath 使用路径表达式来选取HTML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
XPath解析步骤: 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。 2.调用etree对象中的XPath方法结合着XPath表达式实现标签的定位和内容的捕获。
解析数据: 将本地的html文档中源码加载到etree对象中: etree.parse(filePath) 将从互联网上获取的源码数据加载到该对象中: etree.HTML('page_text') 调用xpath方法,利用xpath表达式解析数据: xpath('xpath表达式')
利用xpath解析,对本地页面test.html进行文本解析 1.实例化etree对象 etree = html.etree2.读取本地html文档 tree = etree.parse('test.html')
1 获取页面title对象 /:表示的是从根节点开始定位。表示的是一个层级。 2 获取body中的所有div标签 //:表示的是多个层级。可以表示从任意位置开始定位。 3 获取指定标签class=“song”的div标签 属性定位:tag[@attrName="attrValue"]
第四章 持久化存储
保存于文件
保存数据最简单的方法就是使用Python的文件操作函数,将数据保存于txt、 csv等文件中。
Python的文件操作函数主要有: open():打开文件 write():写入文件 close():关闭文件 当配合with一起使用时,我们无需关心文件关闭问题,系统自动关闭,如: with open(“douban.csv”) as f:
保存于数据库
安装MySQL第三方库: pip install mysqlclien
导入python操作数据库模块 Import MySQLdb
Python中访问MySQL数据库的方法:连接数据库服务器:db = MySQLdb.connect(host, user, password, database,charset) 获取游标操作数据:db.cursor() 编写SQL语句:sql = “insert into xxx” 执行SQL:db.execute() 提交数据:db.commit() 关闭数据库:db.close()
使用代理爬取数据
代理的作用:突破自身IP访问的限制,破解封IP这种反爬机制 隐藏自身真实IP
代理ip的类型: http:应用到http协议对应的url中 https:应用到https协议对应的url中
代理ip的匿名度: 透明:服务器知道该次请求使用了代理,也知道请求对应的真实ip 匿名:知道使用了代理,不知道真实ip 高匿:不知道使用了代理,更不知道真实的ip
代理池
代理池:即n个代理IP组成的一个集合。
代理池Ip的来源: 1.网上购买,可靠性强 2.网上爬取免费代理IP,可靠性差
第五章Ajax与selenium
Ajax分析方法
好处:更好的用户体验 无需频繁手动重新刷新整个页面,减少了页面加载的等待时间,大大提升了用户体验,增加用户粘性。 节省流量 由于只更新了局部页面的数据,相对加载整个页面来说,大大节省了流量,减轻了服务器的负担。
Ajax概念 Ajax,全称Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是新的编程语言,而是利用JavaScript在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容的技术。
Ajax三个步骤 1、发送请求 当页面的某个地方需要更新数据时,会向服务器发送Ajax请求,请求的最底层是通过JavaScript实现的。 2、解析内容 服务器发送响应内容,可能是HTML代码或者JSON数据。使用JavaScript处理响应数据。 3、渲染网页 JavaScript有改变网页内容的能力,解析完响应内容之后,就可以调用JavaScript来针对解析完的内容对网页进行下一步处理了。
selenium网页自动化
Selenium 是一个用于Web应用程序测试的工具,它直接运行在浏览器中,就像真正的用户在操作一样。通俗点讲,它能直接驱动浏览器,模拟人的各种操作行为,如下拉、鼠标点击、键盘输入、拖拽等操作。最后可以获取页面渲染后的HTML代码。
安装Selenium库:pip install selenium
.安装浏览器驱动程序:(1)查看Chrome浏览器的版本。 (2)下载Chromedriver(3)配置环境变量
声明浏览器对象
访问页面 driver.get("https://www.baidu.com/")#请求页面
获取页面代码:HTML=driver.page_source
执行JavaScript Selenium并未提供所有的页面交互操作方法,例如爬虫中用得最多的下拉页面(用于加载更多内容)。Selenium提供了execute_script()方法,用于执行JS,这样我们就可以通过JS代码实现这些操作了。以下代码实现了将页面下拉到底部的功能 driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
主题
主题