SAST weekly | python爬虫——requests库简介
优采云 发布时间: 2022-05-13 15:26SAST weekly | python爬虫——requests库简介
SAST weekly是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注,欢迎愿意分享知识的同学投稿
爬虫简介
可能很多同学听说过爬虫但并不知道那是什么东西。爬虫,英文名(spide,我一直搞不清楚的一点就是spider为什么会被译作爬虫………),通俗来讲就就是一个能够自动从网上扒拉下来你想要的东西的程序。很多语言都可以实现爬虫功能(但讲真,还没见过用C++写爬虫的......),下面主要简要介绍一下如何用python的requests来实现爬虫。
撸起袖子开始干
下面我们废话少说,直接动手开始写爬虫。在本篇文章中,我们将以爬取百度作为例子。(这里科普一下,百度是一个拿来测试网络环境的好地方)
首先,用pip安装requests库
pip install requests
然后引入requests
在http中,获取网络资源的请求被称为GET,requests库的网络请求方式也与这种说法保持了一致,因此,爬取网页的代码就一行:
r = requests.get()
在requests爬取网页后,会返回一个requests.model.Response对象,这个对象里面保存了我们爬取网页的状态和相应的内容。
我们可以通过r.status_code来看网页返回的状态码:
可以看到在这个例子中返回了200,说明请求成功。
获取网页内容时,我们可以通过requests.text和requests.content来获取,这两种方式的不同之处在于,text返回的是文本内容,content返回的是二进制内容(question: 如果爬取的是图片或者视频时,应该保存哪种形式的内容)。这里提醒一下,一般一个网页的内容是很多的,有时候直接用r.text输出会看得眼花,这里可以先用r.text[:700],来看一部分爬取的内容:
可以看到,返回的内容里面的内容看不懂,这种时候需要查一下文本的编码。
发现这并非是我们熟悉的utf-8或者gbk编码,这种时候,可以借助r.apparent_encoding来辅助我们进行编码的转换
这个时候再输出文本,我们可以看到已经变成我们可以正常阅读的文本(顺便吐槽一波百度)
这样,一次简单地抓取就完成了。当然,真正的爬虫远比这要复杂,因为考虑到动态网页的渲染,反爬虫的进行,以及爬虫效率等方面。
其实requests库还有很多强大的功能在这里由于篇幅的原因没能展开,比如requests.get()函数还可以传入键字对以作为url的额外信息,传入cookie来保持登录状态等操作,以及还有http的多种请求方式,感兴趣的同学可以自己去google
爬虫与反爬虫
通过之前的描述,我们可以看到,写一个简单的爬虫还是很轻松的,再加上BeautifulSoup和re库的辅助,从网页上获得我们所需要的信息其实并非难事。但是,理想很丰满,现实很骨感。对于大多数网站而言,爬虫其实是一个不太受待见的用户。一些比较理智的爬虫还好,还懂得控制自己的访问频率等,遇到一些比较没良心的爬虫基本就是往死里爬的,这种高流量且没有对于网站本身没有什么价值的访问是要被会使网站对用户的响应变慢,甚至有可能直接导致网站崩溃(对于这点我深有感触,所以请各位骚年在学爬虫的时候手下留情),因此也就出现了各种反爬虫的机制,比较对访问频率很高的IP进行封杀,还有另外一种就是检查header,如果发现是爬虫的话,直接拒绝它的访问,amazon的反爬虫手段之一就是这种,下面以amazon为例来说明如何避过这种机制。
首先,我们先试一下直接进行爬取,输入如下代码: