爬虫的第一个笔记

1.为什么要学习爬虫?

数据的来源

1.企业生产的用户数据

2.数据管理公司

3.政府/机构提供的公开数据

4.第三方数据平台购买数据

5.爬虫爬数据

爬虫的定义

网络爬虫(又称为网页蜘蛛,网络机器人)就是模拟客户端发送请求,接收请求响应,一种按照一定的规则,自动抓取互联网信息的程序。

爬虫怎么抓取网页上的数据?

网页的三大特征:

1.网页都有自己唯一的URL

2.网页都是HTML来描述页面信息

3.网页都使用HTTP/HTTPS协议来传输HTML数据

爬虫的设计思路:

1.确定需要爬取的URL地址

2.通过HTTP/HTTPS协议获取对应的HTML页面

3.提取HTML页面有用的数据

为什么选择Python做爬虫?

简介,高效,支持模块多,HTTP请求和HTML解析的模块丰富。

调用其他接口方便。

2.爬虫的分类

爬虫分为:

1.通用爬虫

2.聚焦爬虫

通用爬虫:是搜索引擎抓取系统的重要组成部分,主要目的是将互联网上的网页下载到本地,形成一个互联网的镜像备份。

聚焦爬虫:是“面向特定主题需求”的一种网络爬虫,它与通用搜索引擎爬虫的区别在于:聚焦爬虫在实施网页抓取时会对内容进行处理筛选,尽量保证只抓取需求相关的网页信息。

3.HTTP和HTTPS协议

HTTP协议简介

协议概念:通信计算机双方必须共同遵守的一组约定,只有遵守这个约定,计算机之间才能相互通信。

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法。

HTTPS协议(HyperText Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。

SSL( Secure Socket Layer 安全套接层)主要用于web的安全传输协议,在传输层对网络连接进行加密,保障Internet上数据传输安全

HTTP的端口号为80

HTTPS的端口号为443

HTTP的请求与响应

HTTP通信由两部分组成:客户端请求消息与服务器响应消息

URL:统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址一种标识。

基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]

scheme:协议(例如:http, https, ftp)

host:服务器的IP地址或者域名

port#:服务器的端口(如果是走协议默认端口,缺省端口80)

path:访问资源的路径

query-string:参数,发送给http服务器的数据

anchor:锚(跳转到网页的指定锚点位置)

客户端HTTP请求

URL只是标识资源的位置,而HTTP是用来提交和获取资源。客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:

请求行、请求头部、空行、请求数据

请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP 0.9:只有基本的文本 GET 功能。

HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。

HTTP请求主要分为Get和Post两种方法

GET是从服务器上获取数据,POST是向服务器传送数据

GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即“Get”请求的参数是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese

POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码

常用的请求报头

1.Host (主机和端口号)

Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。

2.Connection (链接类型)

Connection:表示客户端与服务连接类型

Client 发起一个包含 Connection:keep-alive 的请求,HTTP/1.1使用 keep-alive 为默认值。

Server收到请求后:

如果 Server 支持 keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接;

如果 Server 不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。

如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。

3. Upgrade-Insecure-Requests (升级为HTTPS请求)

Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。

4. User-Agent (浏览器名称)

User-Agent:是客户浏览器的名称

5. Accept (传输文件类型)

Accept:指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式。

Accept: */*:表示什么都可以接收。

Accept:image/gif:表明客户端希望接受GIF图像格式的资源;

Accept:text/html:表明客户端希望接受html文本。

Accept: text/html, application/xhtml+xml;q=0.9, image/*;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有的图像格式资源。

6. Referer (页面跳转处)

Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。

7. Accept-Encoding(文件编解码格式)

Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。

8. Accept-Language(语言种类)

Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。

9. Accept-Charset(字符编码)

Accept-Charset:指出浏览器可以接受的字符编码。

10. Cookie (Cookie)

Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息

11. Content-Type (POST数据类型)

Content-Type:POST请求里用来表示的内容类型。

服务端HTTP响应

HTTP响应也由四个部分组成,分别是: 状态行、消息报头、空行、响应正文

常用的响应报头(了解)

1. Cache-Control:must-revalidate, no-cache, private。

这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。

2. Connection:keep-alive

这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。

3. Content-Encoding:gzip

告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。

4. Content-Type:text/html;charset=UTF-8

告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。

5.Date: Thu, 02 Jan 2020 06:32:55 GMT

这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。

响应状态码

响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

常见状态码:

100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。

200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。

300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。

400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。

500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。

4-爬虫requests库

requests的作用

作用:发送网络请求,返回相应数据

中文文档API:http://docs.python-requests.org/zh_CN/latest/

response.text和response.content的区别

response.text

类型:str

修改编码方式:response.encoding = 'utf-8'

response.content

类型:bytes

修改编码方式:response.content.decode('utf8')

requests深入

发送POST请求

哪些地方我们会用到POST请求:

1 登录注册(post比get安全)

2 需要传输大文本的时候(POST请求对数据长度没有要求)

爬虫也需要在这两个地方模拟浏览器发送post请求

使用代理

问题:为什么爬虫需要使用代理

1 让服务器以为不是同一个客户端在请求

2 防止我们的真实地址被泄露,防止被追究

使用代理IP

准备一堆的IP地址,组成IP池,随机选择一个IP来用

检查IP的可用性

1.可以使用requests检查

2.在线代理IP质量检查的网站

cookie和session区别

cookie数据存放在客户端的浏览器上,session数据放在服务器上。

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

爬虫处理cookie和session

带上cookie、session的好处:能够请求到登录之后的页面

带上cookie、session的弊端:一套cookie和session往往和一个用户对应请求太多,请求次数太多,容易被服务器识别为爬虫

不需要cookie的时候尽量不去使用cookie

但是为了获取登录之后的页面,我们必须发送带有cookies的请求

requests提供了一个叫做session类,来实现客户端和服务端的会话保持使用方法1实例化一个session对象2让session发送get或者post请求session=requests.session()response=session.get(url,headers)

请求登录之后的网站的思路:

1 实例化session

2 先使用session发送请求,登录对应网站,把cookie保持在session中

3 在使用session请求登录之后才能访问的网站,session能够自动携带登录成功时保存在其中的cookie,进行请求

不发送post请求,使用cookie获取登录后的页面

cookie过期时间很长的网站

在cookie过期之前能够拿到所有的数据,

配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 浩言正语442:格拉斯在《剥洋葱》中说:“回忆就像剥洋葱,每剥掉一层就会露出一些早已忘却的事情。层层剥落间,泪湿衣...
    永远的浩子阅读 98评论 0 1
  • 大人们经常会羡慕小朋友,无忧无虑天真烂漫,每天什么都不用做玩耍就好。不像大人需要尊守无数规则,肩负各种责任。 可是...
    HZHSR阅读 302评论 0 0
  • 写个序 如果有一天我将死去,那么这就是我为自己的过去,现在,未来,写的一个传记. 告诉这个世界,我曾经来过. 我是...
    沐似雨阅读 202评论 0 0
  • 我在工作日的早上,慢慢地走,画了美美的妆,慢慢地走。纵使心里有些发慌,我最会用"这是最后一次放纵"来安慰自己。看到...
    插画大师Q阅读 72评论 0 1
  • 观察者模式:在对象之间定义一对多的依赖,当对象的状态发生改变时,依赖对象就会收到通知自动更新。我们先看看jdk提供...
    探索者_逗你玩儿阅读 108评论 0 0