Py学习记录
Python 常规学习
Python学习笔记(一)
Python学习笔记(二)
Python学习笔记(三)
Python学习笔记(四)
Python学习笔记(五)
Python学习笔记(六)
Python学习笔记(七)
Python习题(一)
Python习题(二)
Python习题(三)
Python习题(四)
Python习题(五)
Python常见Bug
Python编程环境
Python-依赖安装(三方库)
Python-VS Code
pip-换源
py 程序转 exe
Python-打开选择文件对话框
Python 项目
Python-密码学
Python-与佛伦禅
Python-喵语翻译
Python-翻译服务器
Python-邮件发送
Python-自动签到
Python-自动签到(Post请求)
Python-自动签到(模拟操作)
Python-图片添加二维码
Python-数据可视化
Python-端口扫描器
Python-未测试项目
Python-虚拟环境
Python-临时环境
Python-venv虚拟环境
Python-Conda
Python-OpenCV
OpenCV-人脸识别
Python-PyTorch
本文档使用 MrDoc 发布
-
+
首页
Python学习笔记(六)
爬虫的能力很大,它既能给很多商业公司做数据分析,也能给你的日常生活当个小帮手。举个例子:分析上海近段时间猪肉价格走势和成交量,招聘网站上平均薪资最高的工种是什么等等。 对于一些商业公司来说,同样会利用爬虫实现很多高大上的事情。 比如说百度搜索,它的核心技术之一就是爬虫,而且是“一只”巨大的爬虫。 现在百度和谷歌的未来方向都是人工智能,人工智能的发展基础就是海量的数据。而爬虫就是打开数据大门的钥匙。 ## 什么是爬虫 当我们使用浏览器去打开一个网页的时候,浏览器会默默地做了很多工作来让你看到这个网页 爬虫的工作,和浏览器在背后做的事情差不多,所以我们先来了解浏览器的工作原理 ### 浏览器是如何工作的  从这个图中来看,只有我们和浏览器。但是实际上还有一方,那就是「服务器」  当我们在浏览器中输入一个网址,也叫做URL(Uniform Resource Locator),然后浏览器就会去存储放置这个网址资源文件的服务器获取这个网址的内容,这个过程就叫做「请求」(Request)。 当服务器收到了我们的「请求」之后,它会把对应的网站数据返回给浏览器,这个过程叫做「响应」(Response)。 所以当你用浏览器去浏览网页的时候,都是浏览器去向服务器请求数据,服务器返回数据给浏览器的这样一个过程  当浏览器收到服务器返回的数据时,它会先「解析数据」,把数据变成人能看得懂的网页页面。 当我们浏览这个网页的时候,我们会「筛选数据」,找出我们需要的数据,比如说一篇文章,一份论文等。 然后我们把这一篇文章,或者是一篇论文保存到本地,这就叫做「存储数据」。 ### 爬虫是如何工作的 我们之所以先了解浏览器的工作原理,是因为其中几个步骤,就是爬虫可以为我们代劳的  当你要去某个网站批量下载文章,如果单纯的使用浏览器的话,那么你就得打开浏览器,输入网址,页面加载完成后,寻找对应文章,一个一个的去点下载按钮。 如果这个过程使用爬虫来处理,那么爬虫就会代替我们去服务器请求数据,然后爬虫帮我们去解析数据,然后按照我们设定好的规则批量把文章下载下来,存储到特定文件中。 是不是很神奇?你只需要执行爬虫,你想要的就拿到了,省了很多步骤!用图来解释原理就是这样的:  对于爬虫来说,「请求」和「响应」都是去「获取数据」。他们是一个步骤的两个部分。所以把他们统一之后,爬虫的工作原理就是下图:  > 第1步:获取数据。爬虫会拿到我们要它去爬的网址,像服务器发出请求,获得服务器返回的数据。 > 第2步:解析数据。爬虫会将服务器返回的数据转换成人能看懂的样式。 > 第3步:筛选数据。爬虫会从返回的数据中筛选出我们需要的特定数据。 > 第4步:存储数据。爬虫会根据我们设定的存储方式,将数据保存下来,方便我们进行后一步的操作。 > 牢记这4步,因为不管一个爬虫程序多复杂,它的核心原理都是这些。 ### 爬虫学习路线  ## 编写爬虫 使用 Python 中的一个库---「requests」来从服务器获取数据 requests需要安装 * 在Mac电脑里打开终端软件(terminal),输入pip3 install requests,然后点击enter即可 * Windows电脑里叫命令提示符(cmd),输入pip install requests 即可 通过requests这个强大的库,我们可以去获取网页的源代码 ### 了解requests库 ```Pyhton import requests #在使用前需要先通过 import 来引入 requests 库 res = requests.get('URL') #我们通过调用requests库中的get()方法来获取数据,这个方法需要一个参数,这个参数就是你需要请求的网址。当请求得到「响应」时,服务器返回的数据就被赋值到 res 这个变量上面 ``` 程序开始的时候引入requests库 requests.get()向服务器发送了请求并将服务器返回的数据保存到res这个变量中  ```Pyhton import requests res = requests.get('https://xiaoke.kaikeba.com/example/gexu/tengwanggexu.txt') ``` ### 了解Response对象 在面向对象的世界中,一切皆可为对象。在这里Response也是一个对象,他有自己的属性和方法。在我们知道一个数据是什么对象的时候,就可以去使用它对应的属性和方法 我们刚刚通过requests.get()拿到的就是一个response对象 ```Pyhton import requests res = requests.get('https://img.kaikeba.com/web/kkb_index/img_index_logo.png') print(type(res)) #打印变量res的数据类型 ```  代码运行结果显示,res是一个对象,它是一个requests.models.Response类。接下来我们就要利用Response对象的属性和方法来提取数据。  #### response.status_code ```Pyhton import requests res = requests.get('https://img.kaikeba.com/web/kkb_index/img_index_logo.png') print(res.status_code) #打印变量res的响应状态码,以检查请求是否成功 ```  res的status_code打印出来是200,意味着这个请求是成功的。服务器收到了我们的请求,并返回了数据给我们。  常用的除了200之外,其他都是请求遇到问题的情况,遇到了之后再查阅就行了。  #### response.content response.content保存着服务器返回的数据的二进制内容,常用于下载图片这类 ```Pyhton import requests # from kkb_tools import open_file # 离线不需要 res = requests.get('http://hiphotos.baidu.com/feed/pic/item/0b7b02087bf40ad15ad612065b2c11dfa9ecce21.jpg') #发出请求,并把返回的结果放在变量res中 pic=res.content #把Reponse对象的内容以二进制数据的形式返回 photo = open('logo.gif','wb') #新建了一个文件logo.png,这里的文件没加路径,它会被保存在程序运行的当前目录下。 #图片内容需要以二进制wb读写。你在学习open()函数时接触过它。 photo.write(pic) #获取pic的二进制内容 photo.close() #关闭文件 # open_file('logo.png') # 离线不需要 ```  运行结束会下载一个文件 #### response.text response.text这个属性就是将 response.content 的二进制数据转换为字符串,适用于文字或者是网页源代码的下载 ```Pyhton import requests #引用requests库 res = requests.get('https://xiaoke.kaikeba.com/example/gexu/tengwanggexu.txt') #用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中 novel=res.text #把Response对象的内容以字符串的形式返回 print(novel) #现在,可以打印小说了 ```  如果想保存到本地,只需写入到文件就行 ```Pyhton import requests # from kkb_tools import open_file # 离线不需要 #引用requests库 res = requests.get('https://xiaoke.kaikeba.com/example/gexu/tengwanggexu.txt') #用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中 novel=res.text #把Response对象的内容以字符串的形式返回 k = open('tengwanggexu.txt','a+',encoding='utf8') # 如果出现编码问题,可以添加encoding='utf8'来解决 #创建一个名为tengwangexu的txt文档,指针放在文件末尾,追加内容 k.write(novel) #写进文件中 k.close() #关闭文档 # open_file('tengwanggexu.txt') # 离线不需要 ```  #### response.encoding response.encoding这个属性代表了“Response”对象的编码 ```Pyhton import requests #引用requests库 res = requests.get('https://xiaoke.kaikeba.com/example/gexu/tengwanggexu.txt') #用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中 res.encoding='gbk' #定义Response对象的编码为gbk novel=res.text #把Response对象的内容以字符串的形式返回 print(novel) #打印 ```  所有的文本数据都有编码类型。这篇文章的编码格式原本是'utf-8'。一般来说,requests库会帮我们自动去判断编码类型,不需要手动指定。 但是如果遇到一些需要自己去指定数据的编码类型的情况,就可以使用“response.encoding”去改变“response”拿到的数据的编码类型。 在这里我们手动制定了编码类型为‘gbk’而不是‘utf-8’。所以导致了编码类型不一致,出现了乱码! ```Pyhton import requests #引用requests库 res = requests.get('https://xiaoke.kaikeba.com/example/gexu/tengwanggexu.txt') #用request去下载《滕王阁序》,将返回的 response 对象保存到 res 变量中 res.encoding='utf-8' #定义Response对象的编码为utf-8 novel=res.text #把Response对象的内容以字符串的形式返回 print(novel) #打印 ```  requests会自己去判断返回数据的编码类型。当判断出错导致乱码的时候,我们就需要自己去指定编码类型,也就是 response.encoding,我们指定的编码类型必须和原数据的编码类型一致 如果没有乱码的话,我们就不需要手动去指定编码类型  「获取数据」就是根据URL去向对应的服务器请求数据,服务器返回数据。在Python中就是使用 request.get()去获取数据,然后得到服务器返回的 Response 对象。通过Response对象的4个属性,我们可以进行下一步的操作 ## 网络世界中的爬虫规范 因为爬虫的请求速度很快,所以如果我们用大量的爬虫去短时间对某一个特定服务器发送海量请求,那么这个服务器也会承受不住这个压力。 服务器的本质也是计算机,所以各大公司都针对爬虫都定下了规则。 对于服务器来说,它是不允许恶意爬虫和高频次请求的爬虫,因为这可能会导致服务器崩溃。不过在一般情况下,服务器都是允许搜索引擎的爬虫在规则允许的情况下对网站进行爬取,收录。 `这些规则,就写在每个网站的 Robots 协议中。 查看 Robots 协议的话,只需要在域名后加入 /robots.txt 就可以查看了` Robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(Robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。 豆瓣的Robots协议( https://www.douban.com/robots.txt) ``` User-agent: * Disallow: /subject_search Disallow: /amazon_search Disallow: /search Disallow: /group/search Disallow: /event/search Disallow: /celebrities/search Disallow: /location/drama/search Disallow: /forum/ Disallow: /new_subject Disallow: /service/iframe Disallow: /j/ Disallow: /link2/ Disallow: /recommend/ Disallow: /doubanapp/card Disallow: /update/topic/ Allow: /ads.txt Sitemap: https://www.douban.com/sitemap_index.xml Sitemap: https://www.douban.com/sitemap_updated_index.xml # Crawl-delay: 5 User-agent: Wandoujia Spider //豌豆荚的爬虫 Disallow: / User-agent: Mediapartners-Google //谷歌的一种爬虫 Disallow: /subject_search Disallow: /amazon_search Disallow: /search Disallow: /group/search Disallow: /event/search Disallow: /celebrities/search Disallow: /location/drama/search Disallow: /j/ ``` Allow和Disallow,Allow代表可以被访问,Disallow代表禁止被访问 豆瓣的协议禁止了豌豆荚爬虫爬所有的页面  Robots协议是各家网站自己定下的一个针对自家网站爬虫的行为准则,我们在使用爬虫的时候都应该去遵守它。`国家现在也对爬虫相关的恶意犯罪进行了打击`
造物者W
2022年1月11日 12:20
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码