Python爬虫第1课 爬虫基本原理讲解

爬虫基本原理讲解

目标
● 什么是爬虫?
● 爬虫的基本流程
●什么是Request和Response?
●Requset
●Response
●能抓怎样的数据?
●解析方式
●关于抓取的页面数据和浏览器里看到的●不一样的问题
●如何解决js渲染的问题?
●怎样保存数据?

01.什么是爬虫

爬虫就是网络爬虫,可以理解为一只在网络上爬行的蜘蛛,遇到需要的一些网页资源,就把它爬取下来,为己所用。
爬虫就是请求网站并提取数据的自动化程序

1.1 请求

我们在使用网络时,例如在浏览器中输入一些信息或者一个网址,按下回车之后,会有相关信息反馈到我们的电脑,这就是一个请求的过程,按下回车,相当于我们将请求提交给相应的服务器,由服务器接收我们的请求并返回信息给我们的电脑。
那么对于爬虫来说,就是要用代码来实现这样一个发送请求得到反馈的过程,实际上我们用爬虫从服务器获取的这些网络资源大多是HTML的一些代码,包括标签、链接之类的数据。那么下一个步骤就是要从这些文本中提取有用信息啦!

1.2 提取

在请求获得网页文本之后,要从这些文本中,找到我们所需要的数据的过程,就是提取。提取出来的信息经过一些处理存进数据库中。

1.3 自动化

我们人,就只有一双手,一双眼睛,面对互联网上海量的资源,要我们人手去一个一个搜索、采集,这个工程量就是你没日没夜,直到生命尽头,你也是做不完的。所以我们就要用到爬虫,用到程序。写完爬虫之后,爬虫就可以代替我们的浏览器向服务器发送请求,获取更多的信息,来在有限的时间内,将信息的价值发挥到最大。

02.爬虫的基本流程
2.1 发起请求

通过HTTP库向目标站点发起请求,即发送一个request,请求可以包含额外的headers等信息,等到服务器的响应。

2.2 获取响应内容

如果服务器能正常响应,会得到一个response,response的内容便是所要获取的页面内容,类型可能有HTML、json字符串、二进制数据(如:图片视频)等类型。

2.3 解析内容

得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是json,可以直接转化为json对象解析。可能是二进制数据,可以做保存或者进一步的处理。

2.4 保存数据

保存形式多样,可以保存为文本,也可以保存至数据库,或者保存特定格式的文件。

03.什么是Request和Response?

(1)浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
(2)服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
(3)浏览器收到服务器的response消息后,会对信息进行相应处理,然后展示。

04.Requset
4.1 请求方式

只要有GET、POST两种,另外还有HEAD、PUT、DELETE、OPTIONS等。
● GET - 从指定的资源请求数据。
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据

● POST - 向指定的资源提交要被处理的数据
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求

GET与POST的比较

GETPOST
后退按钮/刷新无害数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
历史参数保留在浏览器历史中。参数不会保存在浏览器历史中。
对数据长度的限制是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。无限制。
对数据类型的限制只允许 ASCII 字符。没有限制。也允许二进制数据。
安全性与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
可见性数据在 URL 中对所有人都是可见的。数据不会显示在 URL 中。

其他HTTP请求的方法:

方法描述
HEAD与 GET 相同,但只返回 HTTP 报头,不返回文档主体。
PUT上传指定的 URI 表示。
DELETE删除指定资源。
OPTIONS返回服务器支持的 HTTP 方法。
CONNECT把请求连接转换到透明的 TCP/IP 通道。
4.2 请求URL

URL全称统一资源定位符,如一个网页文档、一个图片、一个视频等都可以用URL唯一来确定。
简单来说,一个连接就是一个URL。

4.3 请求头

包含请求是的头部信息,如user-agent、host、cookies等信息。

4.4 请求体

请求是额外携带的数据,如表单提交时的表单数据

05.Response
5.1 响应状态

有多种响应状态,如200表示成功、301跳转、404找不到页面、502服务器错误。
● 1xx消息——请求已被服务器接收,继续处理
● 2xx成功——请求已成功被服务器接收、理解、并接受
● 3xx重定向——需要后续操作才能完成这一请求
● 4xx请求错误——请求含有词法错误或者无法被执行
● 5xx服务器错误——服务器在处理某个正确请求时发生错误 常见代码: 200 OK 请求成功 400 Bad Request 客户端请求有语法错误,不能被服务器所理解 401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden 服务器收到请求,但是拒绝提供服务 404 Not Found 请求资源不存在,eg:输入了错误的URL 500 Internal Server Error 服务器发生不可预期的错误 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 301 目标永久性转移 302 目标暂时性转移

5.2 响应头

Response Headers,如内容类型、内容长度、服务器信息、设置cookie等。

5.3 响应体

最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等。

06.能抓怎样的数据?
6.1 网页文本

如HTML文档、json格式文本

6.2 图片

获取到的是二进制文件,保存为图片格式

6.3 视频

同为二进制文件、保存为视频格式即可

6.4 其他

只要是可以请求到的,都可以获取

07.解析方式
7.1 直接处理
7.2 Json解析
7.3 正则表达式
7.4 BeautifulSoup
7.5 PyQuery
7.6 XPath
08.关于抓取的页面数据和浏览器里看到的不一样的问题

出现这种情况是因为,很多网站中的数据都是通过js,ajax动态加载的,所以直接通过get请求获取的页面和浏览器显示的不同。

09.如何解决js渲染的问题?

分析ajax请求
Selenium/webdriver
Splash
PyV8,Ghost.py

10.怎样保存数据

文本:纯文本,Json,Xml等
关系型数据库:如mysql,oracle,sql server等结构化数据库
非关系型数据库:MongoDB,Redis等key-value形式存储

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值