一、发送简单的请求
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。与urllib相比,Requests更加方便,可以节约我们大量的工作,建议爬虫使用Requests库。具体可以参考这篇文章:《Python爬虫之requests库》
下面来完成一个小需求:通过requests向百度首页发送请求,获取百度首页的数据
常用的方法:
- response.text
- response.content
- response.status_code
- response.request.headers
- response.headers
实现代码:
import requests
response = requests.get("http://www.baidu.com")
二、发送带header的请求
在上图中,可以看到返回response.request.headers的时候,默认的user-Agent是python-requests/2.22.0,这个时候,网站就会知道访问自己的家伙是个程序(或者起码不是一个正常的浏览器),然后网站就可能会进行一些欺骗的操作来返回一些虚假的信息给爬虫。
因此,请求带上header的目的就是模拟浏览器,欺骗服务器,获取和浏览器一致的内容
header的形式:字典
例如:
header = {
"User-Agent":"Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/54.0.2840.99 Safari/537.36"
}
用法:requests.get(url,headers = header)
效果图:
此时返回的数据才是百度真实的页面源码
发送带参数的请求
当我们使用百度搜索Python的时候,我们看一下他的导航栏会变成什么样子(注意观察,会发现参数与参数之间使用&连接):
然而在这一堆参数里面,我们尝试着删除那些我们看不懂的参数(这些参数可能是由js生成的),我们留下关键的参数wd=Python,然后我们会发现网页依旧可以搜索到我们想要的数据:
因此,发送带参数的请求时,我们注意下列几点:
- 参数的形式:字典
- kw = {‘wd’:‘Python’}
- 用法:requests.get(url,params = kw)
- 注意:url里面不用自己写问号,url写根网址就行
使用实例:
课后题目:
获取新浪首页,查看response.text和response.content.decode()的区别
使用response.text时:
使用content时:
区别在于解码