zoukankan      html  css  js  c++  java
  • 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进行截图,然后解析截图即可。
  • 相关阅读:
    20165326 java第二周学习笔记
    20165326 选做1
    20165326 java第一周学习笔记
    2018-2019-1 20165325 《信息安全系统设计基础》第七周学习总结
    2018-2019-1 20165325 20165320 20165337 实验二 固件程序设计
    2018-2019-1 20165325 《信息安全系统设计基础》第六周学习总结
    2018-2019-1 20165325 《信息安全系统设计基础》第五周学习总结
    2018-2019-1 20165325 《信息安全系统设计基础》第四周学习总结
    2018-2019-1 20165325 《信息安全系统设计基础》第三周学习总结
    2018-2019-1 20165325 《信息安全系统设计基础》第二周学习总结
  • 原文地址:https://www.cnblogs.com/lpdeboke/p/14236923.html
Copyright © 2011-2022 走看看