python爬虫学习笔记.requests库的使用

一,基本用法

Ⅰ,GET请求

1,get()方法
用于构建GET请求

参数:

requests.get(url,params,**kwargs)

params:用于添加额外的参数
**kwargs:12个控制访问的参数,如headers

返回的类型:
requests.models.Response对象
*属性:
status_code:状态码
text:HTTP响应内容的字符串形式
content:HTTP响应内容的二进制形式
cookies:为了识别用户身份,保持对话而存储用户本地终端上的数据
encoding:
apparent_encoding:

2,基本实例
json()方法:
若想直接解析返回结果,得到一个字典格式,可用json()方法

import requests

params = {
     
    'name':'lucy',
    'age':'17'
}
url = 'http://httpbin.org/get'

response = requests.get(url,params)
print(response.status_code)
print(response.text)
print(response.json())

3,抓取网页
搁置,待学习正则表达式后回看

4,抓取二进制数据
用于抓取图片、音频、视频等文件

代码:

import requests

url = 'https://github.com/favicon.ico'
response = requests.get(url)

with open('image1.ico','wb') as file:
    file.write(response.content)

5,添加headers

import requests

url = 'https://www.zhihu.com/signin?next=%2F'
headers = {
     
    'use-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36'
}
response = requests.get(url,headers)
print(response.text)

Ⅱ,响应
requests.codes:
状态码查询对象
状态码及相应的查询条件:https://blog.csdn.net/qq_51102350/article/details/116034703

示例:

import requests

url = 'https://www.baidus.com/'
response = requests.get(url)
if not response.status_code == requests.codes.ok:
    exit('fail')
else:
    print('sucess')

Ⅲ,POST请求

import requests

url = 'https://httpbin.org/post'
data = {
     
    'name':'lucy',
    'age':'17'
}
response = requests.post(url,data)
print(response.text)

二,高级用法
文件上传、Cookies设置、代理设置等

Ⅰ,文件上传

import requests

url = 'https://httpbin.org/post'
with open('image1.ico','rb') as file:
    files = {
     'file':file}
    response = requests.post(url,files=files)
    print(response.text)

Ⅱ,Cookies

1,获取Cookies
获得Resposne对象
调用cookies属性
使用items或keys或values将其转换为元组

import requests

url = 'https://www.baidu.com/'

response = requests.get(url)
#调用Resposne类的cookeis属性即可得到Cookies,它是一个RequestCookieJar类型
print(response.cookies)

for key,value in response.cookies.items():
    print(key + '=' + value)
for key in response.cookies.keys():
    print(key)
for value in response.cookies.values():
    print(value)

2,用Cookie来维持登录状态
将cookie和host设置到headers里

import requests

url = 'https://www.zhihu.com/'
#user-agent,host,cookie缺一不可
headers = {
     
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
                 ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
    'host':'www.zhihu.com',
    'cookie':'_zap=3d90c69e-1aa6-47ca-adde-e1023587981b; d_c0="'
              'ANBW9PS0qxKPTrCJL6c4zPNdLBWOi8Ewgd4=|1613540697"; '
              '_xsrf=8PnDnt1HjUCMRIFBZ03bUN5ma02HM3QE; z_c0=Mi4xM'
              'FpFVUJRQUFBQUFBMEZiMDlMU3JFaGNBQUFCaEFsVk5QVmNzWVFDc'
              'UdIZWZpU25iZTgxZm43em1oT0JNZDF5SlFn|1614743869|0a0ac1f'
              '3ae38f7bd64503ac0ae748e9df5fa78c9; q_c1=c26ba9b21fe94775'
              'b92ceffbc3e1a12a|1614744111000|1614744111000; tshl=; tst'
              '=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1618470143,161'
              '8538688,1618548247,1619146657; Hm_lpvt_98beee57fd2ef70ccdd5'
              'ca52b9740c49=1619146657; SESSIONID=2R7Ov9bK6YTluPMAco1wcSlMQ'
              'apZgai3n3v2tCKSJvo; JOID=UVwVBEN7Lh-PouzeU38iy8-oXXlCTngvz9_'
              'SuB9GcE_k2LeUFtoaleuu791bCPhbhipkaUu-UxYDPtxKSpvDDsE=; osd=V'
              'FEWA01-IxyIrOnTUHgszsKrWndHQ3sowdrfuxhIdULn37mRG9kdm-6j7NpVDf'
              'VYgSRhZEi5XRMOPdtET5bACc8=; KLBRSID=af132c66e9ed2b57686ff5c489976b91|1619146666|1619146652'
}

response = requests.get(url,headers=headers)
print(response.text)

3,会话维持
问题:
requets中,直接利用get()或post()模拟的网页的请求相当于不同的会话,也就是说相当于从两个浏览器中打开不同的界面。
如:假设先用post()登录了一个界面,又用get()访问,那么get()是无法获得登录后的内容的。

解决方法一:两次都采用post()方法,在两次请求时设置一样的cookies。

解决方法二:维持同一个会话,即:在同一个浏览器中打开一个新的选项卡而不是打开一个新的浏览器。此方案要借助Session()方法创建Session对象。

附:http测试网址:http://httpbin.org/

*待深入学习后回看

4,SSL证书验证
SSL:加密套接字协议层
SSL证书:用于服务器身份验证和数据传输加密,由官方CA机构颁发

参数verify:
get(),post()等的参数
bool类型

对于证书未被官方CA机构信任的网站,可以将verify参数设置为False来访问。

5,代理设置
一些网站,刚开始时可以爬,请求太频繁它就不让你爬了

设置HTTP代理:

参数proxies:
get(),post()等的参数
用于设置代理
字典类型

import requests

url = 'https://www.taobao.com'
proxies = {
     
    'http':'http://10.10.1.10:3128',
    'https':'https://10.10.1.10:3128'
}
#此处设置的是无效代理,有效代理需购买
response = requests.get(url,proxies=proxies)

6,超时设置
参数timeout:
get(),post()等的参数
发出请求到服务器返回响应的时间
请求分为两部分:连接(connect)和读取(read)
可以用元组分别设置这两部分的值,也可直接设置总和
若不设置,则会永久等待

import requests

url = 'https://www.taobao.com'
timeout1 = 1#请求时间总和
timeout2 = (2,4)#前者为连接时间,后者为读取时间
response = requests.get(url,timeout = timeout1)
response = requests.get(url,timeout = timeout2)

7,身份认证
问题:访问网站时,可能要求我们输入用户名和密码

baisicauth:基本认证

HTTP认证:
auth参数:
get(),post()等的参数
用于设置用户名和密码
接受requests.auth.HTTPBasicAuth类

import requests
import requests.auth

url = 'https://mail.qq.com/'
#可传HTTPBasicAuth类
response = requests.get(url,auth=requests.auth.HTTPBasicAuth('3530809393','Hwc020504'))
print(response.text)
#可直接传元组,会默认使用HTTPBasicAuth类来认证
response = requests.get(url,auth=('3530809393','Hwc020504'))
print(response.text)

8,Prepared Request
将请求表示为数据结构,各个参数都可以通过一个Request对象来表示。
该数据结构叫做Prepared Request。

requests.Request()方法:
功能:可以建立一个Request对象。
参数:请求的相关参数,如请求方法(get或post),url,data,headers等
返回:返回一个Request对象

Session对象prepare_request()方法:
功能:将Request对象转换为Prepared Request对象。
参数:Request对象
返回值:Prepared Request对象

Session对象send()方法:
参数:Prepared Request对象实例
返回:返回requests.models.Response对象

代码:

import requests
import requests.auth

url = 'https://httpbin.org/post'
data = {
     
    'name':'lucy',
    'age':'19'
}
headers = {
     
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebK'
                 'it/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46'
}

#建立Request对象实例
req = requests.Request('POST',url=url,headers=headers,data=data)
#建立Session对象
s = requests.Session()
#借用Request对象实例建立Prepared Request对象实例
preq = s.prepare_request(req)
#建立Response对象
response = s.send(preq)
print(response.text)

你可能感兴趣的:(Python爬虫学习笔记,python,爬虫)