1 2 Fork me on GitHub 6

Python爬虫(一)-必备基础

”python爬虫系列“目录:

入坑须知

  • 网络爬虫:一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
  • 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进行截图,然后解析截图即可。
posted @ 2021-01-05 17:33  peng_li  阅读(321)  评论(0编辑  收藏  举报
1