当前位置: 首页 > news >正文

Python 课程7-requests和BeautifulSoup库

前言

        在数字化高速发展的今天,网络编程已成为每个开发者的必备技能。从数据采集、接口调用到信息挖掘,网络编程的应用无处不在。本教程将带您深入探索Python的网络编程世界,详细讲解requests库的使用、API数据的抓取与处理,以及如何利用BeautifulSoup进行网页爬虫。我们将逐步解析每个指令,助您快速掌握这门技能,成为网络编程的高手!


目录

  1. 网络编程简介
    • 1.1 什么是网络编程
    • 1.2 网络编程的应用场景
  2. 网络请求(requests 库)
    • 2.1 安装requests库
    • 2.2 发送GET请求
    • 2.3 发送POST请求
    • 2.4 设置请求头和参数
    • 2.5 处理响应
  3. API数据抓取与处理
    • 3.1 理解API
    • 3.2 调用RESTful API
    • 3.3 解析JSON数据
    • 3.4 错误处理与异常捕获
  4. 爬虫简介(BeautifulSoup)
    • 4.1 安装BeautifulSoup
    • 4.2 获取网页内容
    • 4.3 解析HTML
    • 4.4 提取数据
    • 4.5 数据存储
  5. 实战案例:从零构建简易爬虫
    • 5.1 确定目标网站
    • 5.2 编写爬虫代码
    • 5.3 数据清洗与保存
  6. 总结与进阶

1. 网络编程简介

1.1 什么是网络编程

网络编程是指通过编程语言实现网络通信的技术,允许不同计算机之间进行数据交换。

1.2 网络编程的应用场景

  • 数据采集:抓取网页或API的数据。
  • 网络通信:如聊天室、邮件客户端等。
  • 远程调用:如远程服务器控制、云服务。

2. 网络请求(requests 库)

requests库是Python中最受欢迎的HTTP客户端库,简单易用。

2.1 安装requests库

pip install requests

 2.2 发送GET请求

import requests  # 导入requests库# 发送GET请求到指定的URL
response = requests.get('https://api.github.com')# 输出响应的状态码,例如200表示成功
print(response.status_code)# 输出响应的内容(文本形式)
print(response.text)

指令解析:

  • import requests:导入requests库,用于发送HTTP请求。
  • requests.get(url):发送GET请求到指定的URL。
  • response.status_code:获取HTTP响应的状态码,检查请求是否成功。
  • response.text:以字符串形式获取响应的内容。

2.3 发送POST请求 

import requests  # 导入requests库# 定义要发送的数据,使用字典形式
payload = {'username': 'test', 'password': '123456'}# 发送POST请求到指定的URL,携带数据payload
response = requests.post('https://httpbin.org/post', data=payload)# 将响应内容解析为JSON格式,并输出
print(response.json())

指令解析:

  • payload:要发送的数据,通常用于提交表单。
  • requests.post(url, data=payload):发送POST请求,data参数用于传递表单数据。
  • response.json():将响应内容解析为JSON格式,便于处理。

2.4 设置请求头和参数 

import requests  # 导入requests库# 自定义请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/5.0'}# 定义URL参数,例如查询参数
params = {'q': 'python', 'sort': 'stars'}# 发送GET请求,携带自定义请求头和URL参数
response = requests.get('https://api.github.com/search/repositories', headers=headers, params=params)# 输出实际请求的URL,包含参数
print(response.url)

指令解析:

  • headers:用于传递HTTP请求头信息,模拟不同的客户端。
  • params:用于传递URL中的查询参数(Query Parameters)。
  • response.url:获取实际发送请求的URL,验证参数是否正确添加。

2.5 处理响应 

import requests  # 导入requests库# 发送GET请求到指定的URL
response = requests.get('https://api.github.com')# 检查请求是否成功(状态码200-399)
if response.ok:# 将响应内容解析为JSON格式data = response.json()# 输出特定的JSON字段内容print(data['current_user_url'])
else:# 输出错误信息print('请求失败')

指令解析:

  • response.ok:返回布尔值,表示请求是否成功。
  • data['current_user_url']:访问JSON数据中的特定字段。

 


3. API数据抓取与处理

3.1 理解API

API(应用程序编程接口)是软件之间的交互接口,允许我们获取特定的数据或服务。

3.2 调用RESTful API

import requests  # 导入requests库# 定义API的URL
url = 'https://api.openweathermap.org/data/2.5/weather'# 定义请求参数,包括城市名称和API密钥
params = {'q': 'Beijing', 'appid': 'your_api_key'}# 发送GET请求,获取天气数据
response = requests.get(url, params=params)# 将响应内容解析为JSON格式,并输出
print(response.json())

指令解析:

  • params:包含API需要的参数,如城市名q和API密钥appid
  • 注意:请将'your_api_key'替换为您实际的API密钥。

3.3 解析JSON数据

# 将响应内容解析为JSON格式
data = response.json()# 从JSON数据中提取温度和天气描述
temperature = data['main']['temp']
weather = data['weather'][0]['description']# 输出温度和天气信息
print(f"温度:{temperature}")
print(f"天气:{weather}")

指令解析:

  • data['main']['temp']:访问JSON数据中main对象下的temp字段。
  • data['weather'][0]['description']:访问weather数组中第一个元素的description字段。

3.4 错误处理与异常捕获

try:# 发送GET请求response = requests.get(url, params=params)# 如果状态码不是200,抛出HTTPError异常response.raise_for_status()
except requests.exceptions.HTTPError as err:# 捕获HTTP错误,并输出错误信息print(f"HTTP错误:{err}")
except Exception as err:# 捕获其他异常,并输出错误信息print(f"其他错误:{err}")
else:# 请求成功,处理数据data = response.json()# ...(数据处理代码)

指令解析:

  • try...except...else结构:用于捕获和处理异常。
  • response.raise_for_status():检查响应状态码,非200则抛出异常。
  • except requests.exceptions.HTTPError:专门捕获HTTP错误。

4. 爬虫简介(BeautifulSoup)

BeautifulSoup是一个用于从HTML或XML文件中提取数据的库。

4.1 安装BeautifulSoup

pip install beautifulsoup4

 4.2 获取网页内容

import requests  # 导入requests库# 目标网页的URL
url = 'https://www.python.org/'# 发送GET请求,获取网页内容
response = requests.get(url)# 以字节形式获取响应内容(适用于非文本内容)
html_content = response.content

指令解析:

  • response.content:获取响应的二进制内容,适用于处理图片、文件等。

4.3 解析HTML

from bs4 import BeautifulSoup  # 从bs4库中导入BeautifulSoup类# 使用BeautifulSoup解析HTML内容,指定解析器为html.parser
soup = BeautifulSoup(html_content, 'html.parser')

指令解析:

  • BeautifulSoup(html_content, 'html.parser'):创建BeautifulSoup对象,准备解析HTML。

4.4 提取数据

# 查找所有<li>标签,且class属性为'menu-item'的元素
events = soup.find_all('li', class_='menu-item')# 遍历找到的元素
for event in events:# 获取元素的文本内容title = event.get_text()# 在元素中查找<a>标签,获取其href属性(链接)link = event.find('a')['href']# 输出标题和链接print(f"标题:{title}, 链接:{link}")

指令解析:

  • soup.find_all('li', class_='menu-item'):按标签名和类名搜索元素。
  • event.get_text():提取元素内的纯文本。
  • event.find('a')['href']:在元素中查找<a>标签,并获取href属性值。

4.5 数据存储

import csv  # 导入csv模块# 以写模式打开名为events.csv的文件,指定编码为utf-8
with open('events.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.writer(file)  # 创建csv写入对象writer.writerow(['标题', '链接'])  # 写入表头# 遍历之前提取的数据for event in events:title = event.get_text()  # 获取标题link = event.find('a')['href']  # 获取链接writer.writerow([title, link])  # 写入一行数据

指令解析:

  • with open(...) as file:上下文管理器,确保文件正确关闭。
  • csv.writer(file):创建用于写入CSV文件的writer对象。
  • writer.writerow([title, link]):将标题和链接写入CSV文件中。

5. 实战案例:从零构建简易爬虫

5.1 确定目标网站

选择一个新闻网站,目标是获取首页的新闻标题和链接。

5.2 编写爬虫代码

import requests  # 导入requests库
from bs4 import BeautifulSoup  # 导入BeautifulSoup类# 目标网站的URL
url = 'https://news.ycombinator.com/'# 发送GET请求,获取网页内容
response = requests.get(url)# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')# 查找所有<a>标签,且class属性为'storylink'的元素
articles = soup.find_all('a', class_='storylink')# 遍历每篇文章
for article in articles:title = article.get_text()  # 获取文章标题link = article['href']  # 获取文章链接print(f"标题:{title}")  # 输出标题print(f"链接:{link}")  # 输出链接print('-' * 40)  # 输出分隔线

指令解析:

  • response.text:以字符串形式获取响应内容(适用于文本内容)。
  • soup.find_all('a', class_='storylink'):查找所有符合条件的<a>标签。
  • print('-' * 40):打印40个-符号,作为分隔线。

5.3 数据清洗与保存

import pandas as pd  # 导入pandas库data = []  # 初始化数据列表# 遍历每篇文章,提取信息并添加到数据列表
for article in articles:title = article.get_text()  # 获取标题link = article['href']  # 获取链接data.append({'标题': title, '链接': link})  # 添加到数据列表# 将数据列表转换为DataFrame对象
df = pd.DataFrame(data)# 将数据导出为CSV文件,不包含索引,编码为utf-8
df.to_csv('news.csv', index=False, encoding='utf-8')

指令解析:

  • data.append({...}):将字典形式的数据添加到列表中。
  • pd.DataFrame(data):将列表转换为DataFrame,便于数据处理和分析。
  • df.to_csv():将DataFrame导出为CSV文件,参数index=False表示不导出行索引。

结论

        通过本教程,我们学习了Python网络编程的核心知识。从使用requests库发送网络请求,到调用API并处理返回的数据,再到利用BeautifulSoup进行网页解析和信息提取,我们逐步深入,解析了每一个关键指令,帮助您全面理解其背后的原理和应用。

        网络编程是现代开发者的必备技能,它不仅能帮助我们获取互联网的丰富资源,还能为我们的项目提供强大的数据支持。掌握了这些技能,您就能够自主编写爬虫、调用各类API,甚至构建自己的网络服务。

 

 


http://www.mrgr.cn/news/26605.html

相关文章:

  • C到C++入门基础知识
  • 知识图谱与大模型的深度结合策略剖析
  • 如何用一个工具管理多个社交媒体账户?
  • 循环控制语句
  • 万字长文解密Apple Intelligence基础模型:打造高效、个性化、安全的端侧大模型
  • Find My后备箱|苹果Find My技术与后备箱结合,智能防丢,全球定位
  • Ruffle 继续在开源软件中支持 Adobe Flash Player
  • 成本估算模型
  • Mastering openFrameworks_Appendix A_使用插件
  • 干耳屎硬掏不出来怎么办?口碑好的可视耳勺
  • 三招教你搞定GPU服务器配置→收藏推荐配置
  • python的循环结构
  • 这么好用的桌面插件 怎么能不分享给你!
  • Nacos1.X中对NacosNamingService的实现
  • 客房智能管家语音识别芯片功能概述
  • 二进制部署ETCD单机版
  • 数据库系统概论(3,4)
  • LeetCode 16. 最接近的三数之和
  • vscode技巧-eslint配置
  • 落地扶持丨酷雷曼山西临汾落地会销圆满收官