当前位置:首页 > 工具 > 正文内容

Python数据采集与处理核心技术解析

访客 工具 2026年5月31日 1

HTTP通信机制与请求配置

在数据抓取过程中,正确构造HTTP请求是获取目标内容的基础。客户端通过请求头传递自身信息,影响服务器响应行为。

request_headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Referer': 'https://example.com',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

高效请求管理与异常处理

使用会话对象可复用连接并自动管理状态,结合重试策略提升网络稳定性。

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
retry_policy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[429, 500, 502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry_policy)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get(url, headers=request_headers, timeout=10)
response.raise_for_status()  # 自动抛出非2xx状态码异常

HTML结构解析技术对比

根据需求选择合适的解析工具:BeautifulSoup适合简单场景,lxml支持XPath表达式进行精准定位。

from bs4 import BeautifulSoup
from lxml import etree

# BeautifulSoup 解析
soup = BeautifulSoup(html_content, 'xml')  # 支持XPath
# lxml 解析
html_doc = etree.HTML(html_content)

元素定位与数据提取方法

灵活运用多种选择器组合实现复杂页面结构的精准提取。

# BeautifulSoup 基础操作
title = soup.find('h1').get_text(strip=True)
links = soup.find_all('a', href=True)

# CSS选择器高级用法
results = soup.select('section.result > .job-title')
filtered_items = soup.select('div[data-status="active"]')

# 正则匹配标签
import re
headers = soup.find_all(re.compile(r'^h[1-6]'))

XPath表达式实战应用

利用XPath语法实现多层级节点筛选和属性匹配。

# 节点选择与属性提取
elements = html_doc.xpath('//div[@class="item"]/span[@class="price"]/text()')
urls = html_doc.xpath('//a[contains(@href, "job")]/@href')

# 条件过滤与文本处理
first_item = html_doc.xpath('//li[position()=1]/text()')
last_element = html_doc.xpath('//div[last()]//text()')

Excel文件自动化处理

通过openpyxl实现数据写入、样式设置与格式化输出。

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment

workbook = Workbook()
sheet = workbook.active
sheet.title = '采集结果'

# 写入表头
headers = ['职位名称', '公司', '薪资范围']
sheet.append(headers)

# 设置标题行样式
for cell in sheet[1]:
    cell.font = Font(bold=True, color='FFFFFF')
    cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
    cell.alignment = Alignment(horizontal="center")

# 批量插入数据
data_rows = [
    ['Python工程师', '科技有限公司', '15K-25K'],
    ['数据分析员', '创新企业', '10K-18K']
]
for row in data_rows:
    sheet.append(row)

# 调整列宽与合并单元格
sheet.column_dimensions['A'].width = 25
sheet.merge_cells('A1:C1')
workbook.save('output_data.xlsx')

多格式数据持久化方案

根据数据类型选择合适存储方式,确保信息完整性和可读性。

# 文本存储
with open('raw_data.txt', 'w', encoding='utf-8') as f:
    f.write(content)

# JSON存储(保留中文字符)
import json
with open('structured_data.json', 'w', encoding='utf-8') as f:
    json.dump(data_list, f, ensure_ascii=False, indent=2)

# SQLite数据库存储
import sqlite3
conn = sqlite3.connect('collected_data.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS job_records (
                    title TEXT, company TEXT, salary TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
                  )''')
cursor.executemany('INSERT INTO job_records VALUES (?, ?, ?, ?)', records)
conn.commit()
conn.close()

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。