初识url
url,叫做统一资源定位符,也就是我们说的网址,或者链接
每一个url,可以定位到一个资源
如果想要得到这个资源
例如:
如果记住了一个图片的网址,下次通过该url,仍可访问这个图片
如果记住了一个网页的网址,下次通过该url,仍可访问该页面
发起请求,申请就可
http协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
网络请求是什么
访问一个网站我们做了什么?
- 输入一个网站(从浏览器b)
- 看到网页的内容(来自服务器s)
- 了解bs架构
我们为什么要访问网站?
- 我们需要查看信息
- 网站有这个信息
- 我们向网站请求获取这些信息
生活中的请求
- 我们需要用钱(我们相当于客户端)
- 父母努力工作有钱(父母相当于服务端)
- 需要用钱时找父母(钱相当于数据)
请求协议
但是
是不是我们只要找父母要钱
父母就会给?
想一想,如果我们找父母要钱时
怎样的请求,会成功的拿到?
- 信息齐全
- 请求合理
因此:
向父母要钱时,是需要有一个规范的
说明详情,要求合理,就可以获得
没有这个规范
一定得不到
用户访问网站时也是一样
我们需要信息
网站提供信息
我们需要按照一个规范来请求
这个请求规范就是http请求协议
了解http请求协议
协议是什么?
。。。
请求协议就是请求时需要尊守的约定
只有我们尊守了这个约定
就可以成功的发起请求
合理的请求,就会得到合适的结果(响应)
下面
我们模拟http协议的工作方式,来写一个向父母要钱的一个合理的请求
当面申请 向刘备申请 常规资金申请方法
申请金额:5000元
申请有:刘禅
币种:人民币
资金用途:购买笔记本电脑
返回方式:支付宝转帐
收款帐号:15912345678
情况说明:老师提示我们要在开学前完成电脑的准备,推荐购买学习型的笔记本电脑。
当我们按照这样的规范向父母提出用钱的申请时
父母一看就懂
就可以迅速给出我们回应
从而避免了一个又一个问题的详情了解
提高了请求的效率
如果是我们操做浏览器向目标网站发起请求索要信息时
需要按http请求协议来发内容
实际的一个请求协议
http://news.baidu.com/guonei
响应协议
浏览器向网站发起了请求
网站回应的时候,也是会按照一个规范来回应的
例如:
观注这个网站的回应
http://news.baidu.com/guonei
以向家长申请用钱为例
家长需要回应学生
规范的回应信息大约如下
网络回应 同意 申请通过
转帐金额:5000元
币种:人民币
到帐时间:即时到帐
收款人:刘禅
打款人:孙尚香
收款帐号:15912345678
叮嘱:省着点花,不够再要
转帐截图
如果按照这样的一套信息发送给学生(申请方)
学生即收到了请求的内容
也收到了相关的信息
访问网站时
有了上面的理解后,继续理解
当我们该问网站时,只是输入了一个网址,就得到内容了
谁在帮我们做这些协议?
请求协议,谁在发?
响应协议,谁在发?
我们应该掌握什么技能?
- 操作。。。。的技能
当我们写代码的时候
请求协议谁在发?
响应协议谁在发?
我们应该掌握什么技能?
- 操作。。。的技能
小结http协议
- 分为请求协议与响应协议
- 请求协议提供了请求相关的信息
- 我要访问哪个网址
- 我是谁
- 我需要什么样的内容
- 我希望这个内容是什么格式的
- 等等
- 响应协议提供了响应的相关信息
- 请求是否通过的回应
- 给你的是什么内容
- 是什么格式的内容
- 等等
获取数据时的阻力
并不是所有的请求,都会得到响应的
拿向家长要钱为例子
需要用钱了,要找家长要钱
按照请求协议,发起请求,内容如下:
当面申请 向刘备申请 常规资金申请方法
申请金额:5000元
申请者:隔壁老张家的熊孩子
币种:人民币
资金用途:购买笔记本电脑
返回方式:支付宝转帐
收款帐号:15987654321
情况说明:老师提示我们要在开学前完成电脑的准备,推荐购买学习型的笔记本电脑。
问,刘备要给熊孩子转帐吗?
为什么?
再或者
刘禅找刘备申请用钱
申请理由是,网吧上网
刘备会同意吗?为什么
服务端的立场
提供什么服务?
人类访问时,会怎样?
爬虫访问时,会怎样?
服务端的反爬
为什么要反爬?
为什么不反爬?
例子,体验一下被反爬
操作:
人工发一次请求
代码发一次请求
比较
通过代码获取数据
import requests
url = 'https://movie.douban.com/'
# 不伪装身份直接去要数据
res = requests.get(url)
con = res.content.decode()
print('响应长度:', len(con))
print('响应状态码', res.status_code)
print(res.request.headers)
反-反爬
了解了反爬的原理以后
如何进行处理,可以实现目标呢?
办法:
发起请求的时候,自报身份
让网站服务器知道,是一个浏览器在请求
被反爬与反反爬的演示代码:
import requests
url = 'https://movie.douban.com/'
# 不伪装身份直接去要数据
res = requests.get(url)
con = res.content.decode()
print('响应长度:', len(con))
print('响应状态码', res.status_code)
print(res.request.headers)
print('-'*30)
# 伪装身份后去要数据
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
res2 = requests.get(url, headers=headers)
con2 = res2.content.decode()
print('响应长度:', len(con2))
print('响应状态码', res2.status_code)
print(res2.request.headers)
能力越大,责任越大
每一种新技术的兴起,都会带来好与坏的两面
我国互联网技术的强大,助力了经济发展,也让网络诈骗兴起
人工智能技术,会让人类生活更加便捷高效,但同样会有很多新的问题
爬虫技术同理,合理使用爬虫技术,提升获取数据的效率
未来大家技术变历害后,不要利用爬虫技术做非法不正当的事情
老师的心声