目录
Python 爬虫基本概念及https协议详解
爬虫是什么?
爬虫的基本组成部分
爬虫的分类
Python 爬虫的实现流程
HTTPS 协议原理概述
https爬取注意点
示例代码 – 完整爬虫代码演示
1. 安装必要库
2. 爬虫代码
代码详解
爬虫的优化技巧
爬虫工作流程通图
HTTP与HTTPS爬取的区别
常见问题与解决方案
Python 爬虫基本概念及https协议详解
爬虫是什么?
Python 爬虫是一种模拟人类访问网页的程序,通过发送HTTP请求获取网页内容,并从中提取所需信息。爬虫被广泛应用于数据采集、搜索引擎构建和自动化任务。
爬虫的基本组成部分
URL管理器:负责跟踪未爬取和已爬取的URL(即队列管理)。
网络请求模块:负责发送HTTP/HTTPS请求,获取服务器返回的响应。
网页解析模块:从网页HTML内容中提取所需数据。
数据存储模块:负责存储提取到的数据,比如保存为文本、CSV 或存入数据库。
去重控制:防止重复爬取同一网页。
爬虫的分类
聚焦爬虫:针对特定需求,爬取特定领域信息。
通用爬虫:爬取全互联网上的信息(如搜索引擎的爬虫)。
增量爬虫:在已有数据基础上补足新增的部分。
Python 爬虫的实现流程
明确目标网站:确定需要爬取的网站和要提取的数据。
分析网页结构:使用浏览器开发者工具观察网页HTML结构,查找目标信息所在的标签或API接口。
发送请求:使用Python的requests库(或类似工具)发送HTTP/HTTPS请求,获取网页内容。
解析数据:使用BeautifulSoup、lxml或正则表达式提取网页中的所需信息。
存储数据:将爬取的数据保存到本地文件或数据库中。
控制频率和去重:通过设置请求头、延迟、代理池防止被封禁,并确保不重复爬取。
HTTPS 协议原理概述
HTTPS(Hypertext Transfer Protocol Secure)是HTTP协议的安全变种,通过SSL/TLS加密握手保证数据传输的安全性。它主要有以下特性:
加密通信:确保数据在传输过程中不会被窃听。
数据完整性:防止数据被篡改。
身份认证:通过服务器证书校验对方身份。
https爬取注意点
需要处理SSL证书验证问题。
避免采集敏感信息,否则可能会引发法律问题。
有些网站可能会使用加密、动态JS加载等手段反爬。
示例代码 – 完整爬虫代码演示
以下将实现一个简单的Python爬虫,通过HTTPS协议爬取一个网站的标题和文章链接,并保存至本地文件。
1. 安装必要库
bash
pip install requests beautifulsoup4 lxml
2. 爬虫代码
Python
import requests
from bs4 import BeautifulSoup
# 设置headers模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
# 目标网址
url = 'https://example.com' # 替换成你想爬取的网址
def fetch_webpage(url):
try:
response = requests.get(url, headers=headers, timeout=10)
# 检查HTTPS SSL证书。可通过verify=False绕过验证——强烈不推荐!
response.raise_for_status() # 检测HTTP状态码是否为200
response.encoding = response.apparent_encoding # 自动识别网页编码
return response.text # 返回网页内容
except requests.exceptions.RequestException as e:
print(f"请求失败:{e}")
return None
def parse_html(html):
try:
soup = BeautifulSoup(html, 'lxml')
# 获取网页标题
title = soup.title.string if soup.title else "无标题"
print(f"网页标题: {title}")
# 获取文章链接(假设是 <a class="article">)
links = soup.find_all('a', class_='article')
article_links = [{'title': link.get_text(), 'url': link.get('href')} for link in links if link.get('href')]
return article_links
except Exception as e:
print(f"解析失败:{e}")
return []
def save_to_file(data, filename='output.txt'):
try:
with open(filename, 'w', encoding='utf-8') as f:
for entry in data:
f.write(f"{entry['title']} - {entry['url']}
")
print(f"数据已保存至:{filename}")
except Exception as e:
print(f"保存失败:{e}")
def main():
print("开始爬取...")
html = fetch_webpage(url)
if html:
articles = parse_html(html)
save_to_file(articles)
if __name__ == '__main__':
main()
代码详解
HTTPS请求的发送
使用 requests.get 发送GET请求,设置自定义请求头以模拟真实用户访问。通过 response.raise_for_status() 确保响应正常。
BeautifulSoup解析网页
使用BeautifulSoup的lxml解析器解析HTML内容。
提取网页标题:soup.title.string
查找指定的HTML标签,比如<a>标签中的具有特定属性的链接。
保存数据
将解析后的数据存储到本地文件(或扩展为存储到数据库)。
HTTPS支持与SSL证书验证
默认requests库会验证SSL/TLS证书。
如果想忽略证书校验,可设置verify=False(不推荐,仅调试用)。
爬虫的优化技巧
反爬虫应对
设置合理的User-Agent,避免使用默认的Python爬虫代理。
添加随机时间间隔,每次请求间隔1-3秒,防止请求过于频繁。
使用代理池,隐藏真实IP地址。
去重机制
使用集合(set)或布隆过滤器记录已爬取过的URLs。
动态网页爬取
如果网页是由JavaScript动态生成的,可以使用浏览器自动化工具,如selenium,或者结合抓包工具分析接口直接请求API。
数据存储扩展
将数据存入数据库(如SQLite、MySQL)。
使用 pandas 保存为Excel或CSV文件,方便后续数据处理。
爬虫工作流程通图
text
1. 确定目标网站与数据 ----> 分析网页结构 ----> 发送请求获取内容 ----> 提取所需数据 ---->
2. 数据存储 -----> 去重、扩展爬取目标 URL ----> 提交到队列/循环爬取 ----重返1.
HTTP与HTTPS爬取的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 加密传输 | 否 | 是 |
| 本地抓包容易性 | 容易 | 较难(需要中间人被动或动态检测解密SSL流量) |
| 性能开销 | 低 | 较高(因有加密解密的开销) |
| 用于爬虫处理方式 | 简单发送请求 | 必须处理证书验证/SSL配置等技术细节 |
常见问题与解决方案
403 Forbidden错误
原因:请求被禁止,多为用户代理识别不符。
解决办法:设置请求头,使用真实浏览器的User-Agent。
429 Too Many Requests(频率限制)
原因:请求过于频繁。
解决方案:增加延迟时间,或利用代理IP池轮换IP。
动态加载内容爬取不到
使用selenium模拟浏览器或抓取网站的API接口返回的JSON数据。
SSL证书验证问题
使用verify=False关闭验证,或者导入目标网站证书。





















暂无评论内容