Python爬虫(一)-必备基础
”python爬虫系列“目录:
- Python爬虫(一)-必备基础
- Python爬虫(二)- Requests爬虫包及解析工具 xpath
- Python爬虫(三)- Scrapy爬虫框架系列
入坑须知
- 网络爬虫:一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
- Python学习网络爬虫主要分3个大的版块:明确目标,抓取,分析,存储。
- 明确目标 (要知道你准备在哪个范围或者网站去搜索)
- 爬 (将所有的网站的内容全部爬下来)
- 取 (去掉对我们没用处的数据)
- 处理数据(按照我们想要的方式存储和使用)
网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。
一、爬虫分两类:通用爬虫、聚焦爬虫
1. 通用爬虫
- 解释:尽可能把互联网上所有网页下载来,存储在本地服务器上。
- 实施:将网页以快照的形式保存在服务器上,进行关键字提取和垃圾数据剔除,提供用户一个访问的方式。
- 操作:爬取网页->存储数据->内容处理->提供检索。
- 例子:各种搜索引擎,如百度、谷歌、搜狗、360等。
- 限制:需要遵从robots协议(指明通用爬虫可以爬取网页的权限的一个txt文件,是一种约定,告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,一般是大型公司的程序或者搜索引擎等遵守)。
- 缺陷:提供的结果千篇一律,提供给所有人通用的一个结果,不能根据具体的人的类型进行区分。
2. 聚焦爬虫
- 解释:为了解决通用爬虫的缺陷,开发人员针对特定用户而开发的数据采集程序。
- 特点:面向需求,需求驱动开发。
二、爬虫的基本流程
step1: 通过http向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
step2: 如果服务器能正常响应,会得到一个Response,Response的内容就是要获取的页面内容。
step3: 解析内容:正则表达式、页面解析库、json。
step4: 保存数据:文本或者存入数据库。
三、HTTP&HTTPS (非常重要)
解释:网络上的网页访问,一般使用的都是超文本传输协议(http协议),用于传输各种数据进行数据访问,从浏览器发起的每次URL地址的访问都称为请求,获取数据的过程称为响应数据
包含什么内容:请求报文和响应报文
请求报文包含:请求行、请求头、请求数据、空行
请求行:
包含方法、URL、HTTP协议版本,eg:GET /index.html HTTP/1.1
请求头:
Accept:浏览器能够处理的内容类型
Accept-Charset:指出浏览器可以接受的字符编码,显示形式eg:‘Accept-Charset:iso-8859-1,gb2312,utf-8’
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Cookie:当前页面设置的任何Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL,这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等,注意:有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载。
User-Agent:浏览器的用户代理字符串,有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求.请求数据:
请求正文中可以包含用户提交的查询信息,在post方法中,将数据以key value形式发送请求
空行:
发送回车符和换行符,通知服务器以下不再有请求
响应报文包含:响应行、响应头、响应正文
响应行
HTTP协议版本、状态码、状态代码的文本表述,eg:HTTP/1.1 200 ok
常用状态码:
100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。
300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。响应头:包含服务器类型,日期,长度,内容类型等
Date:表示消息发送的时间,时间的描述格式由rfc822定义
server:服务器名字。
Connection:浏览器与服务器之间连接的类型,显示形式eg:‘Connection:keep-alive’ 表示:‘告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求’
content-type:表示后面的文档属于什么MIME类型
Cache-Control:控制HTTP缓存响应正文:服务器返回的HTML页面或者json数据
四、常见的反爬策略以及应对手段
- 反爬策略1:通过headers判断是不是浏览器请求来实现反爬虫的效果。
应对策略: 可以自定义headers,添加headers的数据,代理来解决。 - 反爬策略2:需要登陆+验证码才能查看的数据。
应对策略: 可以通过模拟登陆+云打码平台策略来抓取。 - 反爬策略3:基于用户行为的发爬虫:例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。
应对策略: 同一IP短时间内多次访问的可以使用动态代理轮询策略+降低访问频次;同一账户短时间内多次进行相同操作可以用多账户+降低访问频次。 - 反爬策略4:动态网页反爬虫,例如:我们需要爬取的数据是通过ajax请求得到,或者通过JavaScript生成的对部分数据进行加密处理的,例如:我们要抓的数据一部分能够抓到,另外的部分加密处理了,是乱码的。
应对策略4:针对动态网页的可以使用selenium+ WebDriver进行抓取,但是比较慢,所以也可以使用查找接口的方式进行抓取,对部分数据进行加密的,可以使用selenium进行截图,然后解析截图即可。