Python爬虫进阶-爬虫零关

Python爬虫进阶-第0关requests库的认识

爬虫原理:模拟浏览器向服务器发送请求,并得到服务器的响应,并将服务器返回的数据进行解析,提取和保存

获取数据

为避免中文冲突,在前面加入# coding=gbk代码,在Pycharm的teriminal-终端中输入pip install requests命令,安装requests库,提前装好避免报错,

# coding=gbk
import requests
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
 #发出请求,并把返回的结果放在变量res中`

解析数据

requests.gets()方法返回response对象,是用机器语言生成的,还需要进一步将其转换和解析,这里就要提到response对象的四种属性:Python爬虫进阶-爬虫零关_第1张图片
response.status_code用来检查我们的requests请求是否得到了成功的响应
,一般来说响应码为200,就是成功响应了。还有其他的响应码:
Python爬虫进阶-爬虫零关_第2张图片

提取数据并保存数据

1.下载图片,通过读写文件,将文件保存到本地:

# coding=gbk
import requests

res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
# 发出请求,并把返回的结果放在变量res中
# 把Reponse对象的内容以二进制数据的形式返回
pic = res.content
# 新建了一个文件ppt.jpg,这里的文件没加路径,它会被保存在程序运行的当前目录下。
# 图片内容需要以二进制wb读写。
photo = open('ppt.jpg', 'wb')
# 获取pic的二进制内容
photo.write(pic)
# 关闭文件
photo.close()

2.下载文字

# 通过读写文件把小说保存到本地了
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
novel = res.text
fic = open('《三国演义》.txt', 'a+')
fic.write(novel)
fic.close()

response.encoding,它能帮我们定义Response对象的编码。
目标数据本身有它的编码类型,这个《三国演义》URL中的数据类型是’utf-8’,编解码需要共享同一种编码类型。就像你给我传纸条用的编码方式如果是“拼音”,我收到后就要拼“拼音”来理解语意——若我以为是“英语”,去查英语字典,那必然看不懂你说了什么。
pycharm的terminal中是如何知道编码类型,并将文字正确显示的呢?
实际上,requests.get()发送请求后,我们得到一个Response对象,其中,requests模块会对数据的编码类型做出自己的判断。
在真实的情况中,我们该在什么时候用res.encoding呢?
目标数据本身的编码方式是未知的。用requests.get()发送请求后,我们会取得一个Response对象,其中,requests库会对数据的编码类型做出自己的判断。但是!这个判断有可能准确,也可能不准确。如果它判断准确的话,我们打印出来的response.text的内容就是正常的、没有乱码的,那就用不到res.encoding;如果判断不准确,就会出现一堆乱码,那我们就可以去查看目标数据的编码,然后再用res.encoding把编码定义成和目标数据一致的类型即可。
==遇上文本的乱码问题,才考虑用res.encoding
总结:
Python爬虫进阶-爬虫零关_第3张图片
爬虫的第0步:获取数据,本质就是通过URL去向服务器发出请求,服务器再把相关内容封装成一个Response对象返回给我们,这是通过requests.get()实现的,

爬虫伦理

*服务器其实就是一个超级电脑,拥有这个服务器的公司,对爬虫其实也有明确的态度。
通常情况下,服务器不太会在意小爬虫,但是,服务器会拒绝频率很高的大型爬虫和恶意爬虫,因为这会给服务器带来极大的压力或伤害。

robots协议
robots协议是互联网爬虫的一项公认的道德规范,它的全称是“网络爬虫排除标准”(robots exclusion protocol),这个协议用来告诉爬虫,哪些页面是可以抓取的,哪些不可以。
使用robots协议的场景通常是:看到想获取的内容后,检查一下网站是否允许爬取
因此我们只需要能找到、简单读懂robots协议就足够了。

域名是什么?域名和URL(网址)有什么关系?

如果把一个网页类比为一幢房子,URL指示了网页的地址,就像房子在地球上的详细到某某街道某某号的具体地址,那么域名就像房子所在的国家,指示了网站的地址。
如果网页的URL是https://pypi.org/project/requests/,那么,此网站的域名是pypi.org;如果网页的URL是http://cn.python-requests.org/zh_CN/latest/,那么网站的域名是cn.python-requests.org
如果网页的URL是https://www.taobao.com/markets/3c/tbdc?spm=a21bo.2017.201867-main.11.5af911d9VV8EyS,那么网站的域名是www.taobao.com

截取部分淘宝的robots协议 -(http://www.taobao.com/robots.txt)

Python爬虫进阶-爬虫零关_第4张图片
robots协议是“分段”的。每个段落都含有以下两种字段:一种是User-agent:,另一种是Allow:或Disallow:。
User-agent表示的是爬虫类型,上面的示例代码注释了“百度爬虫”和“谷歌爬虫”,我们自己写的爬虫一般要看User-Agent: *,*指向所有未被明确提及的爬虫。

Allow代表允许被访问,Disallow代表禁止被访问。字段对应的值都含有路径分隔符/,限制了哪些或哪一层目录的内容是允许或者禁止被访问的。淘宝禁止其他爬虫访问所有页面,也就是说,自己写的爬虫不被欢迎爬取www.taobao.com域名下的任何网页。

淘宝限制了百度对产品页面的爬虫,却允许谷歌访问。

详细代码可参考:
https://github.com/Bryant-New

你可能感兴趣的:(爬虫)