news 2026/5/14 6:07:07

Python使用3种方法实现数据采集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python使用3种方法实现数据采集

好的,Python 实现数据采集(通常指网络爬虫或从 API 获取数据)有多种方法。以下是三种常用且核心的方法:

方法 1:使用requests+BeautifulSoup(适用于静态 HTML 页面)

这是最基础和常用的组合,用于抓取静态网页内容。

  1. requests: 用于向目标 URL 发送 HTTP 请求(GET/POST 等),获取网页的 HTML 源代码。
  2. BeautifulSoup: 用于解析获取到的 HTML 或 XML 文档,提取其中的结构化数据(如文本、链接、表格等)。

示例代码:

import requests from bs4 import BeautifulSoup # 1. 发送请求获取页面 url = 'https://example.com' response = requests.get(url) # 检查请求是否成功 if response.status_code == 200: # 2. 解析 HTML soup = BeautifulSoup(response.text, 'html.parser') # 使用 'html.parser' 解析器 # 3. 提取数据 (示例:提取所有标题) titles = soup.find_all('h1') # 找到所有 <h1> 标签 for title in titles: print(title.get_text()) # 打印标题的文本内容 else: print(f"请求失败,状态码: {response.status_code}")

优点:简单易学,速度快,资源消耗低。缺点:无法处理由 JavaScript 动态渲染的内容。


方法 2:使用Selenium(适用于动态渲染页面)

当网页内容是通过 JavaScript 在浏览器中动态生成时,requests只能获取到初始 HTML(不包含 JS 执行后的结果)。Selenium可以模拟真实浏览器的行为。

  1. Selenium: 它是一个自动化测试工具,但广泛应用于爬虫领域。它通过 WebDriver 控制浏览器(如 Chrome, Firefox)加载页面、执行 JavaScript、与页面元素交互。
  2. WebDriver: 需要下载对应浏览器的驱动(如chromedriver对应 Chrome)。

示例代码:

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 设置浏览器选项(可选:无头模式节省资源) options = webdriver.ChromeOptions() options.add_argument('--headless') # 无头模式,不显示浏览器窗口 options.add_argument('--disable-gpu') # 初始化 WebDriver (需提前下载 chromedriver 并配置 PATH 或指定路径) driver = webdriver.Chrome(options=options) # 或者使用 webdriver.Firefox() # 访问目标 URL driver.get('https://example.com') # 等待特定元素加载完成(显式等待) try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "dynamicContent")) ) # 元素加载完成后,提取数据 dynamic_text = element.text print(dynamic_text) finally: # 关闭浏览器 driver.quit()

优点:能处理 JavaScript 渲染的动态内容,可以模拟用户操作(点击、输入)。缺点:速度较慢,资源消耗(内存、CPU)较大。


方法 3:调用 API (适用于有提供接口的数据源)

许多网站或服务(如社交媒体、新闻聚合、天气服务)提供公开或需要认证的 API (Application Programming Interface)。直接调用 API 获取数据通常是更高效、更规范的方式。

  1. 寻找 API: 查看目标网站的开发者文档,寻找其提供的 API 端点。
  2. 发送请求: 使用requests库向 API 的 URL 发送 HTTP 请求(GET/POST)。
  3. 处理响应: API 通常返回结构化的数据格式,如 JSON 或 XML。使用 Python 内置的json模块解析 JSON 数据最为常见。

示例代码:

import requests import json # API 端点 URL (示例) api_url = 'https://api.example.com/data' # 可能需要的参数 (如 API Key, 查询参数) params = { 'param1': 'value1', 'api_key': 'YOUR_API_KEY' # 如果 API 需要认证 } # 发送 GET 请求到 API response = requests.get(api_url, params=params) if response.status_code == 200: # 解析返回的 JSON 数据 data = response.json() # 直接解析为 Python 字典/列表 # 处理和使用解析后的数据 print(json.dumps(data, indent=4)) # 漂亮打印 JSON # 或者访问特定字段: print(data['key']) else: print(f"API 请求失败,状态码: {response.status_code}")

优点:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 6:05:04

从零掌握生成式AI:开源学习路径与实战项目全解析

1. 项目概述与核心价值最近在GitHub上看到一个名为“panaverse/learn-generative-ai”的项目&#xff0c;作为一个在AI领域摸爬滚打多年的从业者&#xff0c;我立刻被它吸引住了。这个项目直译过来就是“学习生成式AI”&#xff0c;名字非常直接&#xff0c;但它的内容组织和深…

作者头像 李华
网站建设 2026/5/14 6:04:03

STM32 纳秒级延时 (ns delay) 的精准标定与指令级优化实践

1. 为什么需要纳秒级延时&#xff1f; 在嵌入式开发中&#xff0c;尤其是涉及高速通信接口&#xff08;如SPI、I2C&#xff09;或精密时序控制&#xff08;如PWM波形生成&#xff09;的场景&#xff0c;微秒级延时往往不够精确。比如驱动某些高速ADC芯片时&#xff0c;数据采集…

作者头像 李华
网站建设 2026/5/14 6:02:13

设备令牌钓鱼攻击机理、技术实现与闭环防御体系研究

摘要 设备令牌钓鱼&#xff08;Device Token Phishing&#xff09;是当前绕过多因素认证、劫持云服务账号的主流攻击方式&#xff0c;其核心是滥用 OAuth 2.0 设备授权流程&#xff08;RFC 8628&#xff09;&#xff0c;通过社会工程诱导用户在官方验证页输入设备代码&#xff…

作者头像 李华
网站建设 2026/5/14 5:59:29

20-20-20护眼规则智能助手:ProjectEye保护你的数字健康

20-20-20护眼规则智能助手&#xff1a;ProjectEye保护你的数字健康 【免费下载链接】ProjectEye &#x1f60e; 一个基于20-20-20规则的用眼休息提醒Windows软件 项目地址: https://gitcode.com/gh_mirrors/pr/ProjectEye 在数字化工作成为常态的今天&#xff0c;你是否…

作者头像 李华
网站建设 2026/5/14 5:58:05

自托管AI工作空间Llama Workspace:企业级部署与核心架构解析

1. 项目概述&#xff1a;为什么我们需要一个自托管的AI工作空间&#xff1f;如果你在团队里负责过AI工具的引入&#xff0c;大概率经历过这样的场景&#xff1a;为了一个简单的文档问答需求&#xff0c;A同事在用ChatGPT Plus&#xff0c;B同事在试Claude&#xff0c;C同事则执…

作者头像 李华