Python从0到50(二十):爬虫基本概念、流程及https协议

目录

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请求,获取网页内容。
解析数据:使用BeautifulSouplxml或正则表达式提取网页中的所需信息。
存储数据:将爬取的数据保存到本地文件或数据库中。
控制频率和去重:通过设置请求头、延迟、代理池防止被封禁,并确保不重复爬取。


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解析网页

使用BeautifulSouplxml解析器解析HTML内容。
提取网页标题:soup.title.string
查找指定的HTML标签,比如<a>标签中的具有特定属性的链接。

保存数据

将解析后的数据存储到本地文件(或扩展为存储到数据库)。

HTTPS支持与SSL证书验证

默认requests库会验证SSL/TLS证书。
如果想忽略证书校验,可设置verify=False(不推荐,仅调试用)。


爬虫的优化技巧

反爬虫应对

设置合理的User-Agent,避免使用默认的Python爬虫代理。
添加随机时间间隔,每次请求间隔1-3秒,防止请求过于频繁。
使用代理池,隐藏真实IP地址。

去重机制

使用集合(set)或布隆过滤器记录已爬取过的URLs。

动态网页爬取

如果网页是由JavaScript动态生成的,可以使用浏览器自动化工具,如selenium,或者结合抓包工具分析接口直接请求API。

数据存储扩展

将数据存入数据库(如SQLiteMySQL)。
使用 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关闭验证,或者导入目标网站证书。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容