02 Python爬虫–基本库的使用requests

一、基本库的使用requests

这是我参与更文挑战的第3天,活动详情查看: 更文挑战

1.下载

1.	对于第三方模块需要手动下载
  		pip install 第三方库名

pip install requests
复制代码

2.requests中的属性

a.响应对象.text  返回字符串数据类型
b.响应对象.content 返回字节数据类型
c.响应对象.request.headers 查看请求头
    响应头:是发送网络请求自动携带身份验证
    相见的请求头/响应头
    host主机和端口
    Connection 链接形式(长链接和短链接)
    User—Agent 当前浏览器用户(用户身份)
    Referer  页面跳转
    (浏览器世界大战)
    Cookie:用来保存用户所有的基本信息
    Set-Cookie:服务器设置用户信息
Upgrade-Insecure-Requests:升级为HTTPS请求
Accept:传输文件类型
Referer:页面跳转处
Accept-Encoding:文件编解码格式 
x-requested-with:XMLHttpRequest:是Ajax异步请求

d.响应对象.headers 查看响应对象
e.响应对象.status_code 查看响应状态码
f.响应对象.request._cookies 请求头中携带的cookies信息
g.响应对象.cookies 查看响应头中的cookies
f.响应对象.json 返回的是json的数据类型
复制代码

3. get请求和post请求

3.1. get请求

get请求是HTML中最常见的请求,就如同访问一个页面
复制代码

实例

# 1.导入爬虫的请求模块 requests
# 导入request模块的全部功能
import requests
# 2.确定目标
url = "https://www.baidu.com/"
# 浏览器上访问百度使用什么请求过程:  get
# 3.发送网络请求并接收响应
response = requests.get(url)  # 返回响应对象
# 4.处理数据并入库
print(response)
复制代码

但是如果要在get请求中添加数据,也是可以的就要用到parms这个参数

# 可以向网页中的args{} 参数添加信息
import requests
url = "https://httpbin.org/get"
data = {
    'name':'germey',
    'age':22
}
response = requests.get(url,params=data)
print(response.text)
复制代码

3.2. post请求

如果网站判断请求是post方式,就该请求方式为post(如网站判断是否登录,是不是爬虫等)
复制代码

用法

response = requests.post(url,heaaders= headers,data = data)
data的形式:字典
pycharm中:Code--Reformat Code调整格式
复制代码

3.3 添加headers

添加headers的目地的让服务器认为我们是正常访问
参数的形式:字典
		kw = {'wd':'长城'}
		用法:requests.get(url,params=kw)
复制代码

1.png
可以按F12,或者鼠标右键查看源代码(打开后刷新网页)

3.4 添加cookies

爬虫中使用cookie的利弊 	好处:能够访问登录后的页面,用cookies保存登录状态        实现部分反反爬  	坏处:一套cookie往往对应的是一个用户的信息,请求太频繁有更大的可能性被对方识别为爬虫,封号   	那么上面的问题如何解决 ?使用多个账号
复制代码

使用

怎么使用cookies   	1.直接将cookies信息放入到headers中  	2.直接封装cookies     	requests.请求方式(cookies={})    3.使用session信息保持用户登录     	cookie 和 session:浏览器世界大战   		cookie是用来保存用户状态信息的,页面和页面直接不能共享   		session用来在浏览器上保存cookie,并且session可以在同一域名下共享使用   		session的意义:可以保持用户的登录会话   		requests.请求方式()不带任何访问记录请求  		requests.session().请求方式() 可以将浏览器产生的cookies信息        		保存在爬虫的session   				1.为爬虫创建一个session机制  					s = requests.session() 返回的是和浏览器session机制一样的对象
复制代码

实例 封装cookies

# 登录人人网爬取,先自己登录后,在发送请求中找到cookies登录信息import requestsurl = "http://www.renren.com/972994466/profile"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}cookies = {"Cookie": "anonymid=k3n4bdx2-2ouv0m; depovince=ZGQT; _r01_=1; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680820; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680825; ln_uact=15729346258; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; JSESSIONID=abcrk-jYV07bXgoGwAe7w; ick_login=b46a1369-61fb-4f7c-a8fc-a5d4eb4c331a; first_login_flag=1; wp_fold=0; jebecookies=f578d5cc-ed70-4492-805f-1c4729f644b3|||||; _de=441F637FD42BDC2C1F90E79AB0D2FDF8; p=fb77a6b7d07408ab565c61446c0034146; t=6fffb2965b04d697458451c4bb5ac3ef6; societyguester=6fffb2965b04d697458451c4bb5ac3ef6; id=972994466; xnsid=3b8ac2ba; ver=7.0; loginfrom=null"}response = requests.get(url, headers=headers, cookies=cookies)print(response.content.decode("utf-8"))#打印字节码数据
复制代码

实例 使用session保存用户信息

import requestsurl = "http://www.renren.com/972994466/profile"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}cookies = {"Cookie": "anonymid=k3n4bdx2-2ouv0m; depovince=ZGQT; _r01_=1; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680820; jebe_key=abd6c815-2716-4cd4-8ca7-0255d9a9812a%7Cf53dd9fc31dca2eb967cebd763efdf34%7C1575213616445%7C1%7C1575213680825; ln_uact=15729346258; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; JSESSIONID=abcrk-jYV07bXgoGwAe7w; ick_login=b46a1369-61fb-4f7c-a8fc-a5d4eb4c331a; first_login_flag=1; wp_fold=0; jebecookies=f578d5cc-ed70-4492-805f-1c4729f644b3|||||; _de=441F637FD42BDC2C1F90E79AB0D2FDF8; p=fb77a6b7d07408ab565c61446c0034146; t=6fffb2965b04d697458451c4bb5ac3ef6; societyguester=6fffb2965b04d697458451c4bb5ac3ef6; id=972994466; xnsid=3b8ac2ba; ver=7.0; loginfrom=null"}response = requests.get(url, headers=headers, cookies=cookies)# print(response.content.decode("utf-8"))#打印字节码数据import requests# 1.为爬虫创建session机制s = requests.session()# 2.登录网址login_url = "http://www.renren.com/ajaxLogin/login"data = {"email": "","password": "",}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36",}response = s.post(login_url, headers=headers, data=data)  # 参数cookies自动保存在sessionprint(response.text)url = "http://www.renren.com/972994466/profile"response = s.get(url, headers=headers)print(response.text)
复制代码

3.5. SSL证书验证

当发送HTTP请求的时候,它会检查SSL证书,我们可以使用verify参数控制是否检查此证书。其实不加verify参数的话默认为True,会自动验证。只需在请求里面加一个verify=FalseResponse = request.get(url,verify=False)
复制代码

3.6. 代理的设置

什么是代理:借助别人的IP地址和端口访问其他网站(可以看一下免免费的ip的网站  西刺代理)反向代理  : 浏览器--->nginx--->服务器正向代理  : 浏览器--->代理--->google服务器
复制代码

用法

# requests.请求方式(proxies={"代理方法": "IP:PORT"})# 为什么传递字典:使用代理需要这只是什么样的代理方法,比如http代理或者https代理 socket代理     					response = requests.get(url,proxies = proxies)proxies的形式:字典proxies = {	'http':'http://',	'https':'https}
复制代码

为什么要使用代理

1.让服务器以为不是同一个客户端在请求2.防止我们的真实地址被泄露,防止被追究a.访问服务器时,对方服务器会保留访问者的ip地址和端口   	10秒  访问了人家阿里云1000次,使用100个ip  10次反向代理:	浏览器通过代理ip地址访问另一个主机程序,该主机程序可以正常接收浏览器请求方式和访问地址,主机程序再通过自己的ip地址访问用户的目标网站,但是目标网站无法获取主机程序的访问地址,该地址是匿名的     服务器根本不知道浏览器的真实IP地址正向代理:	直接使用代理ip访问服务器,代理ip会在自己的主机上保留使用者的真实ip    服务器知道使用代理的用户的真实IP地址
复制代码

怎么实现反反爬

使用多个代理
复制代码

IP被封了怎么办?

凉拌
复制代码

实例

import requestsurl = "https://www.baidu.com"proxies = {    "https": "https://114.239.146.116:808"}response = requests.get(url, proxies=proxies)print(response.content.decode("utf-8"))
复制代码

如果url是https,那么proxies里面就要设置https。

如果url是http,那么proxies里面就要设置http.

4. 美化输出

1.导包 from pprint import pprint2.输出 pprint(response)
复制代码

5. 保存原样输出

with open("douban.json",'w',encoding='utf-8') as f:	f.write(json.dumps(response,ensure_ascii=False,indent = 4))#原样输出
复制代码

6. json使用注意点

json中的字符串都是双引号引起来的		如果不是双引号			用eval:能实现简单的字符串和python类型的转换				replace:把单引号替换为双引号		往一个文件中写入多个json串,不再是一个json串,不能直接读取
复制代码

7. retrying

1.导入包  from retrying import retry2.@retry(stop_max_attempt_number=3)@retry(stop_max_attempt_number=3)def cc(url):	response = requests.get()	#获取三次,如果3次不行就报销
复制代码

示例

import requestsfrom retrying import retryheaders = {    'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',    'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',}@retry(stop_max_attempt_number=3)def _parse_url(url,method,data,proxies):    print("相应失败")
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享