什么是爬虫:
爬虫也就是网络爬虫(Web Spider)。翻译过来就是在网络上爬行的蜘蛛???,这时候如果把互联网看成是一张大网来的话,那么爬虫就是在大网上爬来爬去的蜘蛛,根据想要的东西,就将它提取出来
我们在浏览器中输入一个网址,点击了回车,就可以看到网页上的信息。这个其实就是浏览器通过请求网站的服务器而得到的网络资源,那么爬虫其实也就是模拟向浏览器发送请求,获得到了当前网页上的HMTL源码。在这些源码中通常包含了标签和文字信息,这时候我们就可以从这里面取到我们想要的信息了
通常爬虫是从某个网站的某个页面开始的,爬取这个页面的内容,找到页面中的其他的链接地址,然后从这个地址爬到下一个页面,这样一直不停的爬下去,就可以做到批量的信息的抓取,那么我们就可以将网络爬虫看成是一个不同爬取网页提取网页信息的程序
爬虫的基本流程:
1、发送请求-->requests
requests库其实是有一个缺陷的,就是不能够执行JS或者是CSS代码
通过第三方类库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的headers信息,然后就是等待服务器的响应,其实就好像我们在浏览器中输入一个网址,然后点击回车。这个过程就是相当于浏览器作为一个客户端朝着服务端发送了一次请求。
2、获取相应的内容
只要是服务器能够正常相应的话,我们就会得到一个Response,这个Response里面就会包含所要获取的内容,这个内容可能是HTML、json字符串、二进制数据(图片、视频)等类型,这个过程就是服务器接受客户端的请求,然后根据这个请求,将指定的HTML文件返回给当前的客户端。
3、解析内容
得到的内容可能是HTML,这个时候可以使用正则表达式,第三方的网页解析库来进行解析,也有可能是Json对象,所以就可以直接进行解析。也可能是二进制的数据,所以要做保存或者进一步的处理。这一步其实就是相当于浏览器客户端把服务端的文件获取到本地,然后进行提取解析将有用的数据提取并且展示出来。
4、保存数据
保存的方式可以是把数据保存成文本,也可以把数据保存到数据库中,或者保存成特定的格式,这个其实就是相当于我们在浏览网页的时候下载了网页上的图片或者是视频
Request和Response:
Request:
浏览器发送信息给网址所在的服务器,这个发送的过程就叫做Request
包含:
请求方式主要有GET和POST两种。GET请求的请求参数会显示在URL的链接后面,比如我们打开百度图片,后面会跟着一个wd这个就表示我们要搜索的关键字,POST请求的请求参数会存放在Request内,并不会出现在URL链接的后面,比如我们登录知乎,在我们输入用户名密码的时候我们会看到浏览器开发者工具的Network页面中Request请求有Form Data的键值对信息,那里面就存放了我们的登录信息,这样做的目的就是为了保护我们的信息的安全性;请求URL:URL的全称是统一资源定位符,也就是我们平常说的网址,比如一张图片、一个音频文件、一个网页文档都可以用一个唯一的URL来表示,它包含的信息指出文件的位置以及浏览器应该怎么去处理它;请求头(Request Headers):请求头包含请求时候的头部信息,比如User-Agent(指定浏览器的请求头),Host,Cookies等信息;请求体:请求体是请求额外携带的参数,比如在登录的时候表单提交的登录的信息
请求的URL:
网页加载的过程:加载一个网页,通常都是先加载document文档,在解析document文档的时候要是遇到了链接就针对这个超链接发起请求来下载里面的内容
Response:
服务器收到浏览器发送的信息后,能够根据浏览器发送信息的内容,做出相对应的处理,然后把消息回传给浏览器,这个过程叫叫做HTTP Response
包含:
响应状态:浏览器中有多种响应状态,比如200表示请求成功,3xx表示重定向页面,4xx网页资源不存在,5xx表示服务器错误;响应头(Response Headers):内容响应,内容长度,服务器信息,设置cookies等;响应体:包含了请求的资源(比如网页的HTML代码,图片的二进制数据等)
请求头:
User-Agent:请求头中如果没有user-agent客户端配置,服务端可能将你当作一个非法的用户
cookies:这个一般是用来保存登录的信息的
ps:一般做爬虫的都会加上请求头来发送请求
需要注意的参数:
Referrer:访问源从哪里来(一些大型的网站,都会通过Referrer来设置防盗链策略;所有爬虫也要加上这个来进行模拟)
User-Agent:访问的浏览器(要加上否则会被当成爬虫程序)
cookie:请求头注意携带
请求体:
如果是GET方式,请求体是没有内容的(GET请求的请求体放在URL后面的参数中,是可以直接看到的)
如果是POST请求,请求体是format data
ps:
登录、注册、文件上传等信息都会被附加到请求内中
登录,输入密码错误的用户名密码,然后提交,就可以看到post,正确登录的时候是无法