requests的使用-python爬虫(三) -合法爬取,拒绝牢饭

requests的使用

简介

如果你了解且使用过urlib的话,requests的底层实现就是urlib
requests会让在爬取数据时更加简洁,requests是第三方库。
因为这个神器是第三方的库,需要安装一下。
利用pip对应安装就好。在使用的时候利用import的方法进行导入就好了。

requests的基本用法

get方法

  • requests.get()用于请求目标网址,类型是一个HTTPresponse的类型。
    案例如下
import requests
response = requests.get(r'http://www.baidu.com')#请求目标网页
print(response.status_code) #打印状态码
print(response.url) #打印请求url
print(response.headers) #打印头信息
print(response.cookies) #打印cookie信息
print(response.text) #按照文档的形式打印网页源码
print(response.content) #以字节流的形式
  • 在运行结果中你可以观察各个方法的作用。

基本的get请求方式

import  requests #引入对应的包
res = requests.get('http://httpbin.org/get')#请求目标网址
page = res.text #获取网页代码
print(page)#打印输出

输出结果为
程序运行结果
这就是基本的get的方法获取目标地址的网页源码

带参数的get请求

举个例子

import requests
data = {
	"name":"wulala",
	"sex":"boy"
}
res = requests.get("http://httpbin.org/get",params = data)#请求目标网址
print(res.text)

运行结果如下
运行结果
这个地方需要注意的是,data的数据提交,如果是中文就会显示unicode码,自己测试一下即可.

解析json格式的数据

直接举例子

import requests
res = requests.get("http://httpbin.org/get")
print(res.text)
print(res.json())

结果
结果
不难发现结果按照键值对的形式输出了,这时候可以使用数据的获取十分方便了。

使用代理

  • 代理,额,就是能隐藏你本地IP的方法,防止目标网址将你的IP放入黑名单。
  • 有很多的代理网址,我一般喜欢使用89代理89代理地址
  • 举一个简单的例子
import requests

my_proxy = {
	"http":"118.24.68.161:80",
	"https":"123.207.43.128:1080"
}
headers = {
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
url = "http://www.mamicode.com/info-detail-2434878.html"
res = requests.get(url,headers=headers,proxies=my_proxy)
print(res.status_code)

如果你能看到返回的状态码为200就代表访问成功了,当然如果你看到”远程主机拒绝访问”的话,你就需要更换你的代理IP,寻找更加高匿名的IP。

基本的POST请求

  • 在这里给大家说一下GET和POST的区别,其实也好理解,POST比起GET来说比较安全,解释如下:
    GET就是把你请求的参数放在了URL里头,POST是通过请求和body来传递参数,也就是前者你可以直观的看到网页的向服务器请求数据的接口和方式,而post则会把请求的参数和参数的内容都隐藏。
  • GET请求网页的方法也就是直接访问地址,就好,读者可以自己亲自试验一下。POST的我给举个例子。
import requests
data = {
	"name":"wulala",
	"sex":"boy"
}
url = "http://httpbin.org/post"
res = requests.post(url,data=data)
print(res.text)

结果如图
结果
可以看到就是form表单的数据

获取cookie数据

  • 什么是cookie
    ☞的就是一些网站为了对登陆的用户进行识别,辨别身份,存储在用户本地的数据。
    在使用爬虫的时候一些需要登陆的站点,你可以先获取到登陆以后的cookie然后在访问的时候将cookie进行提交,模拟人工的登陆操作。当然这个cookie也有一定的时效性,不同的网址,时效性不同,也就是你如果需要长期爬取某个网址的数据的时候,不推荐这么使用,不够稳定。
  • 我们写个案例,然后获取一下cookie的数据,你也可以通过在浏览器页面右击在控制台中进行查看。
import requests 
res = requests.get("http://www.baidu.com")
print(res.cookies)
print(type(res.cookies))
for k,v in res.cookies.items():
	print(k+":"+v)

结果
需要注意的是cookie大多数都是经过加密的,所以你看到的结果都是加密后的结果,

安全证书验证设置

  • 什么是安全证书
    简单的说就是一个数字签名,你在这个网址上进行访问,交易等等行为都要通过安全证书的验证。
    举了栗子:
    就用我们常用的12306来说
import requests
res = requests.get("https://www.12306.cn",verify=Flase)
print(res.status_code)

结果
返回200表示你能够访问到
但是会有警告,警告的大致意思就是(用我的烂英语)不安全的请求。https 其实就是加了安全验证的地址我们去除安全验证就会出这样的警告
如果想去除这样的警告可以这样做

import requests

requests.packages.urllib3.disable_warnings()#去除警告信息

res = requests.get("https://www.12306.cn",verify=False)
# print(res.text)
print(res.status_code)

加上这一行代码之后就会对访问时的警告信息进行消除。

超时异常捕获

  • 超时异常其实就是,在规定时间内你依旧没有访问到目标地址
    直接演示用法
import requests


try:
	res = requests.get('http://httpbin.org',timeout=0.1)#限定0.1秒内访问到目标
	print(res.status_code)
except Exception as e:
	print(e)

0.1秒之内是访问不到的,于是就会抛出异常
打印异常原因
结果
结果显示就是连接失败。。。

  • 其实异常的种类有好多,产生原因也好多,至于说如何捕获和发现这些异常,需要你在使用时进行调试,然后对应的进行处理。
发布了23 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36389249/article/details/102409838
今日推荐