初始爬虫

1.爬虫的矛与盾

反爬机制:网站可以通过制定相应的策略或者技术手段,防止爬虫进行网站数据的爬取

反反爬策略:爬虫程序可以通过制定相关的策略或者技术手段,破解网站中具备的爬虫机制,从而可以获取网站中相关的数据。

robots协议:君子协议,规定了网站中那些页面可以被爬虫,哪些不行

根据协议,网站管理员可以在网站域名的根目录下放一个robot.txt的文本文件,里面可以指定不同的网络爬虫能访问的页面和禁止的页面。网络爬虫采集这个网站之前,可以先或者这个文件,然后解析里面的规则,最后根据规则来采集网页数据

例如:https://www.bilibili.com/robots.txt


2.web请求全过程剖析

浏览器输入网址到我们看到整个页面的过程:

以百度为例。在访问百度的时候,浏览器会把这次的请求送到百度服务器(百度的一台电脑),由服务器收到这个请求,然后加载一些数据,返回给浏览器进行显示。这里百度返回给浏览器的不是直接的页面,而是页面源代码(由html,css,js组成)。由浏览器执行页面代码,然后展示给用户。具体过程如下

web请求过程

是否所有数据都在页面源代码中?否,这边介绍下网页渲染过程:

第一种:服务器渲染

就是我们请求到服务器的时候,服务器吧全部数据写入到html中,我们浏览器就能能拿到带有数据的html内容。

如下:

由于数据直接写在html中,我们能看到的数据都在页面源代码中。这种网页一般都相对容器抓取。

第二种:客户端渲染(前端js渲染)

这种机制一班是第一次请求服务器返回一堆HTML框架结果。然后再次请求到真正保存数据的服务器,由这个服务器返回数据,最后在浏览器上对数据进行加载。

客户端渲染过程

这样做的好处就是服务器那边能缓解压力,而且分工明确,容器维护。典型网页:https://www.jd.com/


客户端渲染实例

那数据如何加载进来?其实我们向下滚动的过程中,js偷偷加载数据,要想看到这个页面的加载全过程,需要F12查看





看到了吧,⻚⾯上看到的内容其实是后加载进来的。

注意:有些时候,我们的数据不⼀定都是直接来⾃于⻚⾯源代码。如果你在⻚⾯源代码中找不到你要的数据时,那很可能数据是存放在另⼀个请求⾥。

3.HTTP协议

协议:就是2个计算机之间为了能流畅的进行沟通设置的君子协议。常见有TCP/IP,SOAP协议,HTTP协议,SMTP协议

HTTP协议:Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本到本地浏览器的传送协议。直⽩点⼉,浏览器和服务器之间数据交互遵守的就是HTTP协议。

HTTP协议把⼀条消息分为三⼤块内容。⽆论是请求还是响应都是三块内容:

请求:

请求⾏ -> 请求⽅式(get/post) 请求url地址 

协议请求头 -> 放⼀些服务器要使⽤的附加信息

请求体 -> ⼀般放⼀些请求参数

响应:

状态⾏ -> 协议 

状态码响应头 -> 放⼀些客户端要使⽤的⼀些附加

信息响应体 -> 服务器返回的真正客户端要⽤的内容(HTML,json)等

在后⾯我们写爬⾍的时候要格外注意请求头和响应头。这两个地⽅⼀般都隐含着⼀些⽐较重要的内容。

请求头常见的一些重要内容(爬虫需要):

user-agent:请求载体的身份标识(用啥发送请求)

Referer:防盗链(这次请求从哪个页面来的?反爬会用到)

Cookie:本地字符串数据信息(用户登录信息,反爬会用到)

响应头中一些重要的内容:

Content-Type:返回内容类型,比如Content-Type: text/html; charset=utf-8

各种神奇的莫名其妙的字符串(需要经验,一般都是token字样,防止各种攻击和爬虫)

请求方式:

Get:显示提交

Post:隐示提交

4.requests模块入门

我们使用python内置的urlib模块来获取页面源代码,但是他不是我们常用的工具。常用抓取页面通常用第三方模块requests。这个模块的优势就是比urlib还有简单,且处理各种请求比较方便。

安装:pip install requests

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

案例1:抓取搜狗内容


代码及运行结果


爬虫结果

案例2:抓取百度翻译数据

注意百度翻译这个url不好弄出来。记住,在输⼊的时候,关掉各种输⼊法,要⽤英⽂输⼊法,然后不要回⻋。就能看到这个sug了。



案例3:抓取⾖瓣电影

https://movie.douban.com/




爬取的信息

学习这次的爬虫第一个课程知道了一些爬虫的基础知识,尤其对爬虫的渲染机制有了更深的理解。

task1:爬取新浪财经的数据

import requests

url = f'http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml'

dic = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"}

response = requests.get(url, headers=dic) # 处理一个小小的反爬

with open("xinlangcaijing.html", mode="w", encoding="utf-8") as f: 

    f.write(response.text)

response.close()

print("over")

代码及结果图片
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容