爬虫专栏第二篇: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)
相关推荐
艾上编程35 分钟前
《Python实战小课:爬虫工具场景——开启数据抓取之旅》导读
开发语言·爬虫·python
lkbhua莱克瓦242 小时前
IO练习——网络爬虫(爬取数据)
java·开发语言·爬虫·io流练习·java练习
sugar椰子皮4 小时前
【爬虫框架-7】日志追踪实现
爬虫
傻啦嘿哟4 小时前
分布式爬虫架构:Scrapy+Kafka+Spark实战指南
分布式·爬虫·架构
是有头发的程序猿5 小时前
1688数据采集:官方API与网页爬虫实战指南
开发语言·c++·爬虫
电商API_180079052476 小时前
数据分析之淘宝商品数据获取方法分享
爬虫·信息可视化
星川皆无恙6 小时前
基于ARIMA 算法模型和NLP:社交媒体舆情分析在涉众型经济犯罪情报挖掘中的应用研究
人工智能·爬虫·python·算法·机器学习·自然语言处理·数据分析
sugar椰子皮6 小时前
【补环境框架】序
爬虫
风跟我说过她6 小时前
基于Scrapy-Redis的分布式房产数据爬虫系统设计与实现
redis·分布式·爬虫·scrapy
小白学大数据6 小时前
实时监控 1688 商品价格变化的爬虫系统实现
javascript·爬虫·python