爬虫基础

一.什么是爬虫?

1.爬虫的定义:

向网站发起请求,获取资源后分析并提取有用数据的程序 

2.爬虫的价值:

互联网中最有价值的便是数据,比如天猫商城的商品信息,链家网的租房信息,雪球网的证券投资信息等等,这些数据都代表了各个行业的真金白银,可以说,谁掌握了行业内的第一手数据,谁就成了整个行业的主宰,如果把整个互联网的数据比喻为一座宝藏,那我们的爬虫课程就是来教大家如何来高效地挖掘这些宝藏,掌握了爬虫技能,你就成了所有互联网信息公司幕后的老板,换言之,它们都在免费为你提供有价值的数据。

 

二.浏览器上网的过程

在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图了。

因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。

 

三.URL的含义

URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

#URL的格式由三部分组成:
#①第一部分是协议(或称为服务方式)。  
#②第二部分是存有该资源的主机IP地址(有时也包括端口号)。 
#③第三部分是主机资源的具体地址,如目录和文件名等。

#例如:
#http://www.baidu.com/s?wd=%E6%B1%BD%E8%BD%A6&rsv_spt=1&rsv_iqid=0xb4006b29000003c5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001

#第一部分:http://   
#第二部分:www.baidu.com/    
#第三部分:s?wd=%E6%B1%BD%E8%BD%A6&rsv_spt=1&rsv_iqid=0xb4006b29000003c5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001

 

四.爬虫的基本流程

#1、发起请求
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等

#2、获取响应内容
如果服务器能正常响应,则会得到一个Response
Response包含:html,json,图片,视频等

#3、解析内容
解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
解析json数据:json模块
解析二进制数据:以b的方式写入文件

#4、保存数据
数据库
文件

五:请求与响应

1.请求与响应的过程

过程如下:
#域名解析 -->
#发起TCP的3次握手 -->
#建立TCP连接后发起http请求 -->
#服务器响应http请求,浏览器得到html代码 -->
#浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) -->
#浏览器对页面进行渲染呈现给用户

六.请求(Request)

#1、请求方式:
    常用的请求方式:GET,POST
    其他请求方式:HEAD,PUT,DELETE,OPTHONS

    ps:用浏览器演示get与post的区别,(用登录演示post)

    post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k3=zzz
    post请求的参数放在请求体内:
        可用浏览器查看,存放于form data内
    get请求的参数直接放在url后

#2、请求url
    url全称统一资源定位符,如一个网页文档,一张图片
    一个视频等都可以用url唯一来确定

    url编码
    https://www.baidu.com/s?wd=图片
    图片会被编码(看示例代码)


    网页的加载过程是:
    加载一个网页,通常都是先加载document文档,
    在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求

#3、请求头
    User-agent:请求头中如果没有user-agent客户端配置,
    服务端可能将你当做一个非法用户
    host
    cookies:cookie用来保存登录信息

    一般做爬虫都会加上请求头


#4、请求体
    如果是get方式,请求体没有内容
    如果是post方式,请求体是format data

    ps:
    1、登录窗口,文件上传等,信息都会被附加到请求体内
    2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post 

七.响应(Response)

# 1xx:指示信息--表示请求已接收,继续处理
# 2xx:成功--表示请求已被成功接收、理解、接受
# 3xx:重定向--信息不完整需要进一步补充
# 4xx:客户端错误--请求有语法错误或请求无法实现
# 5xx:服务器端错误--服务器未能实现合法的请求
请求收到,继续处理:
            100      客户端必须继续发出请求
            101      客户端要求服务器根据请求转换HTTP协议版本

     操作成功收到,分析,接受:
            200      交易成功
            201      提示知道新文件的URL
            202      接受和处理、但处理未完成
            203      返回信息不确定或不完整
            204      请求收到,但返回信息为空
            205      服务器完成了请求,用户代理必须复位当前已经浏览过的文件
            206      服务器已经完成了部分用户的GET请求

     重定向:
            300      请求的资源可在多处得到
            301      永久重定向,在Location响应首部的值仍为当前URL(隐式重定向)
            302      临时重定向,在Location响应首部的值仍为新的URL(显示重定向)
            303      建议客户端访问其他URL或访问方式
            304      Not Modified 请求的资源没有改变 可以继续使用缓存
            305      请求的资源必须从服务器指定的地址得到
            306      前一版本HTTP中使用的代码,现行版本中不再使用
            307      声明请求的资源临时性删除

     客户端错误:
            400      错误请求,如语法错误
            401      未授权
               HTTP 401.1    未授权,登录失败
               HTTP 401.2    未授权,服务器配置问题导致登录失败
               HTTP 401.3    ACL  禁止访问资源
               HTTP 401.4    未授权  授权被筛选器拒绝
               HTTP 401.5    未授权  ISAPI或CGI授权失败
            402      保留有效ChargeTo头响应
            403      禁止访问
               HTTP 403.1    禁止访问  禁止可执行访问
               HTTP 403.2    禁止访问  禁止读访问
               HTTP 403.3    禁止访问  禁止写访问
               HTTP 403.4    禁止访问  要求SSL
               HTTP 403.5    禁止访问  要求SSL 128
               HTTP 403.6    禁止访问  IP地址被拒绝
               HTTP 403.7    禁止访问  要求客户端证书
               HTTP 403.8    禁止访问  禁止站点访问
               HTTP 403.9    禁止访问  连接的用户过多
               HTTP 403.10   禁止访问  配置无效
               HTTP 403.11   禁止访问  密码更改
               HTTP 403.12   禁止访问  映射器拒绝访问
               HTTP 403.13   禁止访问  客户端证书已被吊销
               HTTP 403.15   禁止访问  客户端访问许可过多
               HTTP 403.16   禁止访问  客户端证书不可信或者无效
               HTTP 403.17   禁止访问  客户端证书已经到期或者尚未生效
            404       没有发现文件、查询或URL
            405       用户在Request-Line字段定义的方法不允许
            406       根据用户发送的Accept拖,请求资源不可访问
            407       类似401,用户必须首先在代理服务器上得到授权
            408       客户端没有在用户指定的饿时间内完成请求
            409       对当前资源状态,请求不能完成
            410       服务器上不再有此资源且无进一步的参考地址
            411       服务器拒绝用户定义的Content-Length属性请求   
            412       一个或多个请求头字段在当前请求中错误
            413       请求的资源大于服务器允许的大小
            414       请求的资源URL长于服务器允许的长度
            415       请求资源不支持请求项目格式
            416       请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,       请求也不包含If-Range请求头字段
            417       服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长
     服务器端错误: 
            500 - 内部服务器错误
               HTTP 500.100 - 内部服务器错误 
               HTTP 500-11 服务器关闭
               HTTP 500-12 应用程序重新启动
               HTTP 500-13 - 服务器太忙
               HTTP 500-14 - 应用程序无效
               HTTP 500-15 - 不允许请求 
            501 - 未实现
            502 - 网关错误
            503 - 服务不可用
            504 - 网关超时
常见http响应状态码

八.总结

#1、总结爬虫流程:
    爬取--->解析--->存储

#2、爬虫所需工具:
    请求库:requests,selenium
    解析库:正则,beautifulsoup,pyquery
    存储库:文件,MySQL,Mongodb,Redis

#3、爬虫常用框架:
    scrapy

 

 

 

posted @ 2018-01-09 20:14  明-少  阅读(98)  评论(0)    收藏  举报