requests库的使用

180 阅读7分钟

网络请求实战

urllib请求模块

urllib是python内置的HTTP请求库。包含request模块、error模块、parse模块、robots.txt 解析模块

  • urllib.request 请求模块
  • urllib.error 异常处理模块
  • urllib.parse url解析模块
  • urllib.robotparser robots.txt 解析模块

urllib.request模块详解

urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程

常用方法:

  1. urlopen():向网站发起一个请求并获取响应,但不支持重构User-Agent
  2. read():读取服务器响应地内容(字节流)
  3. getcode():获取HTTP的响应码
  4. Request():支持重构请求头

urlopen()实例

# import urllib.request      #导包的方式1
from urllib import request   #导包的方式2
# 目标url
url = "http://www.baidu.com/"
# 发起请求
response = request.urlopen(url) # 不支持重构请求头
# 获取响应
# html = response.read()  # 获取字节流
html = response.read().decode('utf-8')  # 获取字符串
# print(html)
print(response.getcode())  # 返回HTTP的响应码,得到正常的响应码就说明没问题

Request实例

注意:Request是request中的

import urllib.request
from urllib import request
url ='https://www.douban.com/'
header={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
req = urllib.request.Request(url,headers=header)   #重构请求头
req1 = request.urlopen(req)
data1 = req1.read().decode('utf-8')
print(data1)

重构请求头可以理解为对代码进行伪装,防止被浏览器的反爬程序检测出来,导致访问失败

urllib.parse模块详解

parse模块定义了url的标准接口,实现url的各种抽取,解析,合并,编码,解码

常用方法:

  • urlencode()解析字段数据
  • quote()解析字符串数据

urlencode()和quote()实战

from urllib import parse

# 第一种方式 parse.quote() 对字符串进行编码
word = '编程'
res = parse.quote(word)
print(res)

# 第二种方式 parse.urlencode() 对字典进行编码
data = {'wd':'编程'}
data = {'wd':'编程'}
res = parse.urlencode(data)
print(res)

对淘宝搜索栏,利用quote()进行实战演练,具体如下:

from urllib import parse,request
url = 'https://uland.taobao.com/sem/tbsearch?keyword='
w = parse.quote(input('请输入你想搜索的内容:'))
url1 = url+w
hearer ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
URL = request.Request(url1,headers=hearer)
# print(URL)
res = request.urlopen(URL)
# print(res.getcode())
data2 = res.read().decode('utf-8')
print(data2)

requests模块

Requests 是 Python 的第三方库,专门用于发送HTTP请求。是在 urllib 的基础上开发而来,与 urllib 相比,Requests 更加方便、快捷,因此在编写爬虫程序时 Requests 库使用较多。第三方模块需要自己手动进行安装,在Terminal界面【pip install requests】即可,如果出现下载超时,在后面加上镜像源即可,具体操作例如【pip install requests -i pypi.tuna.tsinghua.edu.cn/simple/】

requests模块的使用

常用方法

  • requests.get()发送GET请求
  • requests.post()发送POST请求
requests响应内容

r.encoding----获得相应的编码

r.cookies ---- 返回cookie

r.headers ----以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None

r.status_code ----响应状态码

r.text ----以获取到的编码解析响应内容

r.json() ---- Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常

r.content----以字节形式(二进制)解析响应内容

requests实战

get请求

import requests  #导包
from urllib import parse  #导包
url = 'https://www.baidu.com/s?wd='
w = parse.quote(input('请输入你想搜索的内容:'))
url1 = url+w
header ={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Cookie':'PSTM=1699327572; BD_UPN=12314753; BIDUPSID=92068D3C5A4CAF9FD74E85044409657D; BAIDUID=0AC910D623E84E2AF2EC0FEB2844D6C4:FG=1; H_PS_PSSID=39713_39733_39678_39817_39841_39905_39909_39913_39935_39932_39942_39941_39939_39931_39974; BDSFRCVID=IhIOJeC62ZIwIcvqfug_riPOGXxaGKJTH6aoC_FvS-u7gREJZS-mEG0PXf8g0KubJmfpogKKKmOTH1tF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tJ4q_IPMJK_3qR5gMJ5q-n3HKUrL5t_XbI6y3JjOHJOoDDvVMMrcy4LdjG5zBRbAK5cD0t5jX-oEVh7jWb7HQUPp3-Aq54RmX2cqb56aJb3CsqcL0IcVQfbQ0b7hqP-jW5TaaJ6D-n7JOpvohfnxy5_3QRPH-Rv92DQMVU52QqcqEIQHQT3m5-5bbN3ut6T2-DA__KtXtUK; ispeed_lsm=2; H_PS_645EC=9beeB%2FezrBuU%2Ft4FB0pyd6r1p%2F%2FpEd5k8oZHTw%2FFniWRDFdj4JA1U3%2FsWZY; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID_BFESS=IhIOJeC62ZIwIcvqfug_riPOGXxaGKJTH6aoC_FvS-u7gREJZS-mEG0PXf8g0KubJmfpogKKKmOTH1tF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tJ4q_IPMJK_3qR5gMJ5q-n3HKUrL5t_XbI6y3JjOHJOoDDvVMMrcy4LdjG5zBRbAK5cD0t5jX-oEVh7jWb7HQUPp3-Aq54RmX2cqb56aJb3CsqcL0IcVQfbQ0b7hqP-jW5TaaJ6D-n7JOpvohfnxy5_3QRPH-Rv92DQMVU52QqcqEIQHQT3m5-5bbN3ut6T2-DA__KtXtUK; BAIDUID_BFESS=0AC910D623E84E2AF2EC0FEB2844D6C4:FG=1; baikeVisitId=9ebd259b-7720-4b1f-a57a-e986dd60c43e',
    'Referer':"https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=zhongguo&fenlei=256&rsv_pq=0xc33ea29e00049ba1&rsv_t=5a72Ux5siuUamG4PKKyxabJHWlHk2ZX5e7wvUbLWWlMRSp4%2B4Rgh6j2m23qH&rqlang=en&rsv_enter=1&rsv_dl=tb&rsv_sug3=10&rsv_sug1=5&rsv_sug7=101&rsv_sug2=0&rsv_btype=t&inputT=1293&rsv_sug4=1855&rsv_sug=1"
}
URL = requests.get(url1,headers=header)
URL.encoding='utf-8'
print(URL.text)

post请求

import requests
# 请求网址
url = 'https://fanyi.sogou.com/api/transpc/text/result'
# 请求头
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Cookie":"SUID=75B5FA761952960A0000000065016BF1; cuid=AAGslytERwAAAAqMTFS2QAEANgg=; SUV=1694591985834583; ABTEST=8|1701420603|v17; wuid=1701420603872; FQV=003c3b153adc1fa12f03c5a6627e71ae; translate.sess=82f84dfe-9881-4240-af38-02440dc740d5; SGINPUT_UPSCREEN=1701420605467; SNUID=DFA4CE5881878A643F2862328256F1F6"
}
# 请求体
data = {
    "from": "auto",
    "to": "en",
    "text": "学习",
    "client": "pc",
    "fr": "browser_pc",
    "needQc": 1,
    "s": "bc70f86d4d6bb6db6c22f59ea3cc0331",
    "uuid": "e974a76d-bdfc-4913-9ab6-f0b7eb933ff9",
    "exchange": False
}
# 获取响应
response = requests.post(url=url,data=data,headers=headers)
print(response.json())

Session和Cookie

在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且在很长时间内都不会失效,这又是什么情况?其实这里面涉及 Session 和Cookie 的相关知识。

Cookie

通过在客户端记录的信息确定用户身份

HTTP是一种无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。

Session

Session,中文称之为会话,通过在服务端记录的信息确定用户身份 。其本义是指有始有终的一系列动作、消息。例如打电话时,从拿起电话拨号到挂断电话之间的一系列过程就可以称为一个 Session。

session实战

import requests
# 创建session对象
session = requests.session()
# 请求头
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0",
    'Cookie':'shanzhi_kmer=kdyb7lb4kj01wtcd71hw9hub8nvi7zu2; csrftoken=7aCqMZAewojGjtI0sCmbVGUUnAF8SnIem5MlY4AYuHCMwhp7vltH6iJ1dpgjmXxG'
}
# 第一次请求的网址
url = 'http://shanzhi.spbeen.com/index/'
# 将请求头添加到session会话
session.headers = headers

response = session.get(url)

response1 = session.get(url='http://shanzhi.spbeen.com/detail/?id=7235')


print(response1.text)