爬虫基础教程:掌握 requests 库的各种知识

非常重要的前言 非常重要的前言 非常重要的前言

这是爬虫专栏的第一篇文章,即Python Requests库基础教程,也是以后我要在爬虫专栏更新内容的一个目录。

关于爬虫这一部分要写的东西实在是太多了,最近时间又变得非常少,我争取有时间就更吧。对这个专栏感兴趣、且手里有富余资金的,可以订阅一下,订阅的小伙伴,可以私信我一下,我们建群沟通各种爬虫知识与案例

这个专栏一定是爬虫这方面写的最全面的。包括但不限于以下内容,我会慢慢更新的哈

精通爬虫技术的各种Python 库讲解

  1. Requests: 获取网页内容、API数据等。

  2. Beautiful Soup:解析HTML和XML文档。

  3. Scrapy: 爬虫框架,使爬虫开发更加高效。

  4. Selenium: 模拟浏览器行为获取到动态生成的内容。

  5. Pandas: 处理和分析爬取的数据。

  6. NumPy: 数值计算和处理。

  7. Matplotlib / Seaborn: 用于数据可视化,更好地理解和展示爬取的数据。

  8. Regex: 正则表达式库,在文本中查找和匹配特定的模式,用于提取数据。

  9. SQLite / SQLAlchemy: 用于存储和管理爬取的数据,便于后续查询和分析。

  10. IPython / Jupyter Notebook: 以交互性和可视化的方式编写和测试爬虫代码。

爬虫实践过程中的各种抓包工具讲解

  1. Fiddler: 这是一个用于调试Web应用程序的免费抓包工具,可以查看HTTP和HTTPS请求、响应以及数据流。

  2. Charles Proxy: 类似于Fiddler,它是一个用于HTTP代理的工具,可以拦截和查看网络流量。

  3. Burp Suite: 主要用于Web应用程序安全测试,但也可以用作抓包工具,可用于查看和修改HTTP请求。

  4. Postman: 尽管主要用于测试API,但Postman还可以用作抓包工具,让您查看和测试HTTP请求和响应。

本文目录

  • Requests库学习大纲
  • 一、介绍
    • 1、什么是 Requests 库?
    • 2、为什么使用Requests库?
    • 3、如何安装 Requests 库?
  • 二、发送 get 请求
    • 1、发送简单的GET请求
    • 2、发送带参数的 GET 请求
    • 3、自定义Headers
  • 三、发送POST请求
    • 1、发送简单的 POST 请求
    • 2、使用JSON发送POST请求

Requests库学习大纲

  • 介绍

    • 什么是Requests库?
    • 为什么使用Requests库?
    • 如何安装Requests库?
  • 发送GET请求

    • 发送简单的GET请求
    • 带参数的GET请求
    • 自定义Headers
  • 发送POST请求

    • 发送简单的POST请求
    • 使用JSON数据
    • 文件上传
  • 响应处理

    • 获取响应内容
    • 获取响应头部信息
    • 获取状态码
    • 解析JSON响应
    • 处理异常情况
  • Sessions和Cookies管理

    • 创建会话(Session)
    • 发送多个请求共享Cookies
    • 自定义Cookies
    • Cookies的持久化
  • 身份验证

    • 使用HTTP基本认证
    • 使用摘要认证
    • 使用Bearer Token认证
  • SSL证书验证

    • 忽略SSL证书验证
    • 指定自定义证书
  • 超时和重试

    • 设置请求超时时间
    • 重试请求
    • 自定义重试策略
  • 高级用法

    • 自定义请求方法和HTTP Verbs
    • 自定义请求头部
    • 使用代理
    • 控制重定向
    • 同步 vs 异步请求
  • 性能优化

    • 使用Session连接池
    • 使用keep-alive提升性能
    • 合理设置请求头部减少响应时间
  • 实际示例

    • 使用Requests库访问API
    • 网页爬虫示例
    • 文件下载示例
  • 进阶主题

    • 使用第三方库结合Requests
    • 自定义中间件
    • 使用扩展库处理认证、缓存等
  • 最佳实践

    • 代码结构和可维护性建议
    • 错误处理和日志记录
    • 单元测试和集成测试

一、介绍

1、什么是 Requests 库?

这个Requests库可是个好东西!它就像是在你懒得亲自去网上请求数据的时候,找来的一个小助手。同样它也是Python编程的一大神器,使用Requests库可以轻松地从互联网上抓取各种信息,就像在自助餐厅里拿盘子一样简单。不管你想要从网页上爬取数据,还是和API打个招呼,Requests库都能让你在编程世界里畅通无阻。

想象一下,你是一个懒惰的人儿,宁愿窝在舒适的代码堆里,也不愿意亲自上网抓取数据。那么,Requests就是你的专属助手,它能用极简的代码帮你模拟浏览器,去网上按照你设置好的规则,完全自动的拜访网站,然后收集你需要的数据。就像是在虚拟世界里派个特工去为你搜集情报一样!

这家伙的用法也简单得不得了,就像是跟朋友聊天一样。你只需要告诉它要去哪个网站,它就会帮你把那里的数据搬回来。不管是文字、图片还是其他各种信息,它都能一股脑儿地给你搬回家。就好像是在网络世界里点外卖,你只需下单,它就会帮你送上门。

当然,别忘了在代码里小心谨慎,不要把自己当成网络暴徒哦。毕竟,Requests库的威力可是很大的,有点像是给了你一把强大的法杖,但你得用它来做好事,不要变成黑客大魔王。

2、为什么使用Requests库?

用Requests库是因为它能让你从网络上拿到你想要的数据,不费吹灰之力。就好像是坐在沙发上点外卖,比亲自去餐厅要省心多了。

你想从某个网站上抓取一些新闻标题?不用愁,Requests来帮你!只需要几行代码,就能模拟浏览器去那个网站,然后把新闻标题拿回来,像是在市场上挑水果一样轻松。比如这样:

import requests

response = requests.get("https://www.example.com/news")
news_titles = response.text  # 这里拿到的是网页的文本内容,还可以进一步处理
print(news_titles)

还有,如果你想和一个网站的API交流,获取实时数据,Requests也能搞定。就像是给朋友发短信一样,你只需要告诉Requests你要什么数据,它就会帮你搞定。比如,你想获取天气信息:

import requests

response = requests.get("https://api.example.com/weather?city=your_city")
weather_data = response.json()  # 这里的数据是以JSON格式返回的,可以直接处理
print(weather_data)

上面例子中的网址都是假设的哈,如果你完整copy想要看结果,你需要换成自己的目标网址哈

3、如何安装 Requests 库?

安装Requests库就像把大象装冰箱一样简单,第一步,把冰箱门打开,第二步,大象放进去,第三步,把门带上。。。

步骤 1:打开终端或命令提示符

首先,你需要打开终端(在Windows上可能是命令提示符),如果在 Spyder 里面安装的话,就是右下角那种Console窗口。

步骤 2:使用pip安装Requests

在终端中,输入以下命令并按回车:

pip install requests

这会自动下载并安装Requests库。嗯,就这么简单!

步骤 3:验证安装

要验证安装是否成功,可以在终端中输入以下代码:


import requests
print(requests.__version__)

如果没有出现错误,并且你看到了Requests库的版本号,那就说明一切顺利!比如我的显示是下面这个:

runcell(0, 'E:/UserData/Desktop/untitled4.py')
2.28.1

二、发送 get 请求

1、发送简单的GET请求

当你发送一个简单的GET请求时,requests.get()方法会帮你建立一个连接到指定的网址,并返回一个Response对象,里面包含了服务器返回的各种信息。你可以通过response.text来获取网页的内容,通过response.status_code来获取响应的状态码,例如:

import requests

response = requests.get("http://www.baidu.com")

# 获取网页内容
content = response.text

# 获取响应状态码
status_code = response.status_code

print(content[:200])  # 打印网页内容的前200个字符
print(f"Status Code: {status_code}")

2、发送带参数的 GET 请求

有时候,我们在请求网站的时候,需要告诉它我们想要什么特定的信息。就像你在餐厅点餐一样,要告诉服务员你想要什么菜。这时,我们可以在请求的网址上附加一些参数,让网站明白我们的需求。

假设我们想要在 www.baidu.com 上搜索关于 ‘Python’ 的内容,这就是我们的需求。让我们看看如何使用 requests 发送这个带参数的 GET 请求:

import requests  # 引入信使

# 定义目标网址
url = "http://www.baidu.com/s"

# 定义参数
params = {
    'wd': 'Python'
}

# 使用信使发送带参数的 GET 请求
response = requests.get(url, params=params)

# 查看响应内容
print(response.text)

这次,我们使用了一个特殊的参数字典 params,就像你在点餐时写下你想要的菜名一样。然后,requests 信使会帮你把这个参数附加在网址上,变成类似于 “http://www.baidu.com/s?wd=Python” 这样的网址,这样网站就知道你要搜索关于 ‘Python’ 的内容了!

3、自定义Headers

首先,让我们来探讨一下Headers是啥玩意。

想象一下您去餐馆吃饭,点菜时服务员给您递上一张菜单,上面有菜名、价格等。那张菜单就是Headers的概念,它包含了请求或响应的元数据。比如,您在发送HTTP请求时,Headers可以告诉服务器您想要什么类型的数据,或者您有什么权限。就好比您点一份素食,在Headers里标明您不吃肉。

现在,让我们一步一步来看如何在发送GET请求时自定义Headers。

import requests  # 别忘了叫小跑腿来

# 我们要去餐馆,也就是发送GET请求的网址
url = "https://jsonplaceholder.typicode.com/posts/1"

# 定制我们的Headers,就像是在餐馆里定制您的特殊需求
headers = {
    "User-Agent": "My Custom User Agent",
    "Authorization": "Bearer mysecrettoken"
}

# 告诉小跑腿,我们要去餐馆,还要带上定制的Headers
response = requests.get(url, headers=headers)

# 小跑腿完成任务后,会把餐馆的菜单(数据)告诉您
print(response.json())

  • import requests:咱们叫来了一个又强又能干的小跑腿,它会帮您发送请求和拿回响应。

  • url:就像是您要去的餐馆,这里我们去JSONPlaceholder这个地方。

  • headers:这是咱们自己定制的Headers,就像是您点菜时特别要求的那张菜单。我们使用了"User-Agent"来模拟您的浏览器信息,还用"Authorization"来表明您有权限。

  • response:小跑腿回来时,手里拿着餐馆的菜单(数据),它是一个包含了服务器响应信息的对象。

  • print(response.json()):小跑腿把餐馆的菜单(数据)展示给您看,这里我们用.json()来把响应转换成字典形式。

三、发送POST请求

1、发送简单的 POST 请求

现在,我们要讲述的是如何用 requests 发送一个简单的 POST 请求。这东西就像是您雇佣的小跑腿,会帮您把包裹送到目的地。记得您得先在代码里导入它,这样您才能让它干活。以下是一段发送POST请求的代码,我会一行一行解释。

import requests  # 首先导入小跑腿

# 咱们要送的包裹,以字典形式组织,数据是键值对,比如"姓名":"大白话"
package = {
    "姓名": "大白话",
    "内容": "您好,这是我给您送的数据包!"
}

# 目标网站的网址,咱们选了新浪微博
url = "https://www.weibo.com/"

# 告诉小跑腿,咱们要发个POST请求,把包裹交给它,它负责送到目的地
response = requests.post(url, data=package)

# 小跑腿完成任务后,会把目的地的反馈告诉您
print(response.text)

  • import requests:这行代码是咱们雇佣小跑腿的第一步,相当于叫它过来。

  • package:这是您的包裹,您可以随便往里装东西,这次咱给包裹装了一个“姓名”和“内容”。

  • url:这是您要送包裹的地方,咱们选了新浪微博,您也可以换成其他网站。

  • response:这是小跑腿完成任务后的回应,里面包含了目的地给咱们的反馈,比如是个"谢谢光临"还是"我已收到包裹"。

  • print(response.text):这行代码是咱们看小跑腿回来的回应,相当于您打开包裹,看看目的地给您回了什么信。

友情提示啊:上面这个POST请求如果你直接放进IDE里面提交的话,是不会返回什么有用的数据的,因为我只是举例子,真实情况下,weibo.com并不知道你提交上去的东西是什么玩意儿,如果我们真的去发送 post 请求的话,首先需要抓包,看一下人家都允许我们 POST 什么东西,我们在构建代码,那才是正确的哈!!

2、使用JSON发送POST请求

首先,咱们要明白一件事:发送POST请求就像是给服务器写信,只不过这次信是在网络上传输的。而JSON,嘿,它就像是这封信的格式,就像您写信时使用的信纸。

现在,让我们来看一下实际的代码,一步一步解释。

import requests  # 别忘了叫小跑腿来

# 咱们要发送的信,也就是我们要传给服务器的数据
letter = {
    "title": "我喜欢学习编程",
    "body": "编程让我感觉好酷,我想成为一名优秀的开发者!",
    "userId": 1
}

# 信要送到的地址,这里我们用JSONPlaceholder来模拟
url = "https://jsonplaceholder.typicode.com/posts"

# 现在,让小跑腿把信送到地址上,就像是把数据传给服务器
response = requests.post(url, json=letter)

# 小跑腿完成任务后,会把服务器的回复告诉您
print(response.text)
  • import requests:这就好像是您叫来了一个特别能干的小跑腿,它可以帮您在网络上传输数据。

  • letter:这个字典就像是您写的信,里面包含了您要告诉服务器的信息。我们用JSON格式是因为它在网络传输中很方便。

  • url:这就是信要送到的地址,我们用JSONPlaceholder这个地方来模拟服务器。

  • response:小跑腿送完信后,会拿到服务器的回复,它是一个包含服务器信息的对象。

  • print(response.text):这行代码就像是小跑腿把服务器的回复展示给您看,您可以知道服务器是不是收到了信。

以上内容更新于 2023年8月31日。

你可能感兴趣的:(Python爬虫基础教程,python,爬虫,网络爬虫)