关于爬虫的一些见解


前言

为啥会写这篇文章

最近有些无聊,于是学习了点python爬虫的相关的知识

爬虫是什么

用python的某些库来模仿人类上网,批量获取想要的数据

比如,我每天想看某个小说网站上自己想看的小说(这本小说每天更新),为了看这本小说我每天都得打开该网站进行阅读,可能还得忍受侧边栏的广告.有没有一种方式,能让我每天获取更新的小说文本呢?答案就是使用python写一个爬虫程序,每天定时(可以在小说更新后的一段时间后)从这网站获取更新小说的最新章节.

很容易发现,我们想要的程序有以下几个需求

  • 每天定时从网站获取小说的最新内容
  • 把获取的内容经过加工处理存放成为我们想要的文件格式(比如txt文本类型)

第一点又可以分为两部分

  1. 定时执行
  2. 向小说网站发送请求,得到网站的回应内容

带着这样的需求写一个python程序可能会比较快地上手爬虫

waite a minutes 为啥非得用python写呢,其他语言不行吗

首先可以肯定的是其他语言是可以写爬虫程序的,比如jaba cpp rust等 其次,不优先使用他们的原因是1.可能没有py的库丰富2.语法不大简洁,可能py一句要在其他语言里使用好几句 最后,请大家记住爬虫就是用程序代理人类向服务器发送请求,然后处理服务器响应给我们的数据

了解http的一些基础知识

请求

需要了解的一点

我门平时上网的时候,比如使用谷歌浏览器,想要访问bilibili,在搜索框里输入哔哩哔哩的域名(bilibili.com)之后,一般情况下,我们客户端会先向dns服务器发送一个请求,请求bilibili.com的服务器的ip地址是啥,dns服务器找到后返回给客户端一个ip(这就是批站服务器的ip了),然后我们就会向这ip发送个get请求,批站服务器响应我们请求,发送给我们一大段内容(这段内容经过浏览器渲染后就是我们所看到的批站首页了)

上述的过程基本是我们用浏览器上网的大多数情况,我们所做的第一步就是用程序来模仿这个过程

在正式开始前,我们需要了解一点基本的http知识方便我们在后边抓包

以请求批站为例子 F12打开开发者工具,我们能看到: Elements里的内容是我们当前界面经过渲染后的所有html内容 我们主要关注的是Network这一列 随便打开一个链接我们观察下:

请求头

点开request header,我们可以发现有这么一堆

主要关注UA 这项表明我们是在用什么操作系统的什么浏览器去访问这个网站,相当于我们的一个身份信息了

一个官方点的描述:请求头是 HTTP 头的一种,它可在 HTTP 请求中使用,并且和请求主体无关 。某些请求头如 Accept、Accept-、 If- 允许执行条件请求。某些请求头如:Cookie, User-Agent 和 Referer 描述了请求本身以确保服务端能返回正确的响应。

响应

状态码

状态码是描述请求一个网站后所处状态的数字 这里显示的是200,表示我们请求已成功,请求所希望的响应头或数据体将随此响应返回。实际的响应将取决于所使用的请求方法。在GET请求中,响应将包含与请求的资源相对应的实体。在POST请求中,响应将包含描述或操作结果的实体。

其他状态码请查阅维基百科

响应体

响应体就是服务器发送给我们的数据了,这里显示的一个json

后续

关于http的相关知识还有很多,读者有兴趣可以自行查阅相关文档

开始编码

robots.txt

“爬虫爬的好,牢饭吃得饱”,爬虫是有法律风险的,有些网站并不想让你爬取一些数据,如果你不幸爬了可能要吃律师函

一般网站有个君子协定,robots.txt,规定了哪些东西可以爬,哪些东西不可以爬,当然如果你遵守这约定也可能吃牢饭,这尺度大家自行把握

这是批站的一个例子:

requests库


文章作者: Aknightive
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Aknightive !
评论
  目录