爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介:本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点,随后深入讲解 GET 请求,以百度页面为例,展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索,以及正确设置 encoding 避免乱码,让您轻松获取所需页面信息。接着探讨 POST 请求,借助 http://httpbin.org/ 诠释其原理,并深度剖析百度登录页面抓包获取参数,运用字典传入数据构建 POST 请求,带您领略模拟登录背后的技术奥秘。

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

  • [1 Requests库的使用](#1 Requests库的使用)
    • [1.1 Requests库的安装](#1.1 Requests库的安装)
    • [1.2 GET请求](#1.2 GET请求)
      • [1.2.1 最基本的GET请求](#1.2.1 最基本的GET请求)
      • [1.2.2 GET请求中加入headers和参数](#1.2.2 GET请求中加入headers和参数)
      • [1.2.3 encoding](#1.2.3 encoding)
    • [1.3 POST请求](#1.3 POST请求)

1 Requests库的使用

1.1 Requests库的安装

可以使用pip或者conda安装requests库,我按装的版本是2.24.0,大家可以酌情安装,不一定非要跟我安装同一个版本,差别不是很大。

1.2 GET请求

GET请求就是访问一个页面的请求。用百度页面为例:

1.2.1 最基本的GET请求

在下面这段代码中,打开了百度页面,通过status_code输出状态码是200,证明我们已经完成了一次正常的对百度页面的GET请求

python 复制代码
import requests
URL = "http://www.baidu.com/"
response_GET = requests.get(URL)
print(response_GET.status_code)

1.2.2 GET请求中加入headers和参数

headers中常加入user-agent,他是为了模拟一个正常用户的身份识别标识。该如何获取呢?打开百度,打开开发者工具,点击network或者网络,刷新。点击一个包并且查看具体信息中的user-agent:

复制下来,并且加入到代码中去:

python 复制代码
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}

在百度首页中搜索python,查看URL中的参数变化,说明wd代表着搜索:

然后设置参数wd并且传入:

python 复制代码
import requests
URL = "http://www.baidu.com/"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
print(response_GET.status_code)

该如何查看文章内容,涉及到了下一个知识点encoding

1.2.3 encoding

如果不设置encoding经常会出现乱码,该如何设置呢。在要访问的页面上右键查看网页源代码,找到如下部分:

这里就是爬虫访问的内容改用什么字符串编码解析。现在知道是utf-8了就可以进行设置。

python 复制代码
import requests
URL = "http://www.baidu.com/"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
response_GET.encoding = 'utf-8'
print(response_GET.text)

可以看到已经能返回正常的中文文字了,但是发现好像跟要找的python没有关系,问题出在了:URL地址上需要加入/s ?

python 复制代码
import requests
URL = "http://www.baidu.com/s?"
kw = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.get(URL,headers = headers,params = kw)
response_GET.encoding = 'utf-8'
print(response_GET.text)

现在已经可以成功找到百度上跟python有关的页面了

1.3 POST请求

使用http://httpbin.org/ 的这个URL作为测试POST的案例:

python 复制代码
import requests
URL = "http://httpbin.org/post"
data = {
    'wd':'python'
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.post(URL,headers = headers,data = data)
response_GET.encoding = 'utf-8'
print(response_GET.text)

通过这个例子说明网站的服务器已经接收到了我们的post请求。

下面打开百度登录页面,打开开发者工具,然后输入用户名和密码,可以发现抓包到post,可以通过从载荷中找到对应用户名密码的参数复制到自己的代码中进行登录:

但是这里属于是百度网站为了安全起见自动做了加密,你们可以换一个安全系数没这么高的小网站,他们的登录一般都可以直接抓包看到用户名和密码:

只要把post中的载荷的信息用字典的方式传入post我们可以用代码实现百度首页的登录(这只是个案例,这个代码跑不了,因为百度首页的登录信息是太多了,就这个字典我输了十分钟都没输全,你们可以换个不这么在乎用户安全的网站试试,我真的尽力了,我真想邦邦两拳给这个开发百度的程序猿,是太负责了。):

python 复制代码
import requests
URL = "https://passport.baidu.com/v2/api/?login"
data = {
    'staticpage': 'https://www.baidu.com/cache/user/html/v3Jump.html',
    'charset': 'UTF-8',
    'token': 'ee1f6dfd3362bc566dfb86df3c61f257',
    'tpl': 'mn',
    'subpro': '',
    'apiver': 'v3',
    'tt': '1733105162149', 
    'safeflg': '0',
    'u': 'https://www.baidu.com/', 
    'detect': '1',
    'gid':'5C21134-1626-4E66-B2A6-8F4C41135DF4',
    'quick_user': '0',
    'logintype': 'dialogLogin',
    'logLoginType': 'pc_loginDialog',
    'loginmerge': 'true',
    'splogin':'rate',
    'username':'18232157902',
    'password': 'zw963807',
    'mem_pass': 'on',
    'isagree': 'on',
    'rsakey': 'HczHrxCxyc82AIEAqFp3xEvCh0pa3f1h',
    'crypttype': '12',
    'ppui_logintime':'850851',
    'login_version':'v5',
    'supportdv':'1',
    'bdint_sync_cookie':'''05WZvQdXKh0CD3c2VGLV1a2T6rYfzw9WOjE8/FjnpXIIII9dJ11wydWL4r7oyc/d5/RS7ZR+e19vp4DEUZmj/Lhqg6bLjxo5pNHE6DKChk+SLs/V+gwTDctKSZ23g4g5PQNte67+sAXaFUgCm5s1E3HULCl/agvHny3ta1cg1RYQ4DyYPcoAlDJfOunhSfurjL22qaEcMelPwKG3901pa9lRnzuuyaKdL2i0yWNO+P0g86LYvCw/WlqcKOohCFKzpLSHwue3aMkgI+oENX4rEWw/YAB3o6fL8oFByL8UigMM1ZRNCh1ruT5HL8xKSxQQxsB69TNEl+ruXJ/tWQOTKL8oEornBZPdz+cnr4NHi1jxUT0qSP7JWeuYT11GWvRPZhp+DByX6bh8+j/0dlTYIHae4HnQdM0SdJLlDeBUXLK2Tk23CUmF4AICunU+Ci/GvbFJ1LYtcK1bUV2zeBc6ukZ5Pd/r+0VjSAfFP49VkjxtQ72HNidd9HgkHupKeY9A36CXPqJBqrYIK7S3dqjGOSazvov/n0g07pPh6aVFGoJYbKlypXQHn0yLA0Sa3MZ0M4uiMDEdLQTvoZSO/yi4eBNv3UJYu1Ao2yapzPZUkTM6JSJSor+Gwxe7BjG8zDzy4osB+s5YPEiaI8YHCc2EZvT7wQbCmXm4BrvLxR3WS84/fJB3gv2xUbk37YbNAH3EisCHhO+PDjdK7VE1YNGIQPFxJsz0cWDZM3Zb3UWrNPt6tDbbQNTFLiWlaY9JO++zSfw9LNvQxxlMYEJTf5kk12LzXkKDOP5QKcAHU/36FkrVb7isQgKhREZr8OEQE0DI7ZUAVKF2BiQsyPGPbAXNhtBLAC4dugoDH/5ug3RWyj9jKQKZVEBsBg7yEwf88QOkz+2oW2zEfoSdBX8mVQZJSQdCG3AitFVGP5inR/rBHUP1Dmmo/kesz1R2mdCRYjiXjkR631fyRbdlJgAlXKVn4ShqzXnc68j1BEU8BBX82Nqu0VU10ic+mUjGzGf+YEV9QFZow4w8uG4vnVzGuFYaC9wuSn4V5h3GMH0syWCYUguok0FR9K+jWcfaV/7me5sTnvxTXNQgZSAkm8QvQLL6I1cE/mDcTAnHY0mba9oOIpe8c2DpJ1uk30oTpQPKZypnO6oJR2knwCIz93bieZlin5jAoNgG3t0w8sSZ+G5G3HpHxmyh/eUFG4LPnMLUZbAyw1O+Mb2Qwwk5GPAZ9MKSTr8czvrvbwH8XJuYH7hmI0wm49cbRVF2C36+paV0KrSW2Or6XNtke4N4Kw5Fs8uX+SeiaP6BZifkncOA7YZtcyE='''
}
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}
response_GET = requests.post(URL,headers = headers,data = data)
response_GET.encoding = 'utf-8'
print(response_GET.text)
相关推荐
m0_6632340120 小时前
Libvio.link爬虫技术与反爬攻防解析
爬虫
Serendipity_Carl20 小时前
1637加盟网数据实战(数分可视化)
爬虫·python·pycharm·数据可视化·数据清洗
瑶池酒剑仙1 天前
Libvio.link爬虫技术解析大纲
爬虫·python
喵手1 天前
Python爬虫实战:构建 Steam 游戏数据库:requests+lxml 实战游戏列表采集与价格监控(附JSON导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集steam商店游戏列表数据·sqlite数据库存放采集数据·价格监控游戏推荐市场分析
zhengfei6111 天前
高级网络安全爬虫/蜘蛛
爬虫
恬淡如雪1 天前
Excel接口测试自动化实战
爬虫·python·excel
m0_663234011 天前
Libvio.link爬虫技术全解析
爬虫
深蓝电商API1 天前
httpx库异步爬虫实战对比aiohttp
爬虫·httpx
0思必得01 天前
[Web自动化] 爬虫合规指南:从法律红线到安全实践
前端·爬虫·自动化·web自动化
喵手2 天前
Python爬虫实战:针对天文历法网站(以 TimeandDate 或类似的静态历法页为例),构建高精度二十四节气天文数据采集器(附xlsx导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集天文历法网站数据·构建二十四节气天文数据