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

python获取网页内容 靠谱的做法

获取网页内容 response = requests.get(url, verify=False) 通过这种方式下载网址不太靠谱, 容易出 ssl错误 requests.exceptions.SSLError: HTTPSConnectionPool(host='agri.hainan.gov.cn', port=443): Max retries exceeded with url: /hnsnyt/xxgk/gfxwj/index_1.html (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1006)'))) , 下面是给出靠谱的做法

如果你希望使用更加安全和可靠的方式下载网页内容,并且希望避免 requests 中的 SSL 问题,有几个替代方案和改进方法,可以更好地处理 SSL 验证、证书问题等。以下是几种更安全的方法:

方法 1: 使用 httpx

httpxrequests 的一个替代库,支持异步请求,也有更好的 SSL 验证功能。httpx 默认会进行 SSL 证书验证,但可以在需要时进行配置。

安装 httpx

pip install httpx

使用示例:

import httpx

url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html'

# 创建一个客户端对象
with httpx.Client() as client:
    response = client.get(url)
    print(response.text)

如果你遇到 SSL 错误,可以通过调整 verify 参数来禁用 SSL 验证,尽管这仍然不推荐用于生产环境:

response = client.get(url, verify=False)

方法 2: 使用 urllib3

urllib3 是 Python 的一个高级 HTTP 客户端,处理 SSL 的方式比 requests 更加底层,适合需要精细控制 SSL 配置的场景。你可以通过 urllib3 来下载网页并管理 SSL 设置。

安装 urllib3

pip install urllib3

使用示例:

import urllib3

# 创建一个 PoolManager,支持更细粒度的控制
http = urllib3.PoolManager()

url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html'

# 禁用 SSL 验证(如果不关心安全)
response = http.request('GET', url, retries=3, timeout=5.0)
print(response.data.decode('utf-8'))

如果你希望进行更精细的 SSL 配置,可以直接使用 SSLContext 来设置证书验证。

方法 3: 使用 aiohttp (异步请求)

如果你需要进行多个异步 HTTP 请求,aiohttp 是一个非常强大的异步 HTTP 客户端库,支持协程,可以让你以更高效的方式进行网络请求。它也有更好的 SSL 处理机制。

安装 aiohttp

pip install aiohttp

使用示例:

import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html'

# 异步运行
html = asyncio.run(fetch(url))
print(html)

如果遇到 SSL 问题,可以通过 verify_ssl 参数来禁用 SSL 验证:

async with session.get(url, ssl=False) as response:

方法 4: 使用 pycurl 库(更底层,支持更多配置)

pycurl 是 Python 对 libcurl 的封装,提供了更多的配置选项,特别适合对 SSL 证书和协议进行精细控制。

安装 pycurl

pip install pycurl

使用示例:

import pycurl
from io import BytesIO

url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html'

# 创建一个缓冲区来接收响应
buffer = BytesIO()

# 创建 cURL 对象
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.WRITEDATA, buffer)

# 禁用 SSL 验证
c.setopt(c.SSL_VERIFYPEER, 0)  # 不验证对方的证书
c.setopt(c.SSL_VERIFYHOST, 0)  # 不验证主机

# 执行请求
c.perform()

# 获取结果
response = buffer.getvalue().decode('utf-8')
print(response)

方法 5: 使用 certifi 自定义证书路径

如果 SSL 错误是由于缺少根证书,你可以通过 certifi 来确保使用最新的证书链。 certifi 提供了 Mozilla 的证书集合,可以帮助你避免 SSL 错误。

安装 certifi

pip install certifi

然后你可以在请求中显式地指定证书路径,确保使用最新的根证书。

import requests
import certifi

url = 'https://agri.hainan.gov.cn/hnsnyt/xxgk/gfxwj/index_1.html'
response = requests.get(url, verify=certifi.where())  # 使用 certifi 的证书路径
print(response.text)

总结:

  • httpx: 推荐用 httpx 库来替代 requests,它有更强的 SSL 处理和更高的灵活性。
  • urllib3: 提供更多底层控制,适合精细的 SSL 配置。
  • aiohttp: 异步请求,适合进行并发下载操作。
  • pycurl: 如果你需要完全控制 HTTP 请求和 SSL 配置,pycurl 是非常强大的选择。
  • certifi: 确保 SSL 证书验证使用最新的证书集。

这些方案都能够在保证安全性的前提下处理 SSL 问题。如果你遇到的主要问题是 SSL 证书问题,确保使用较新的证书链,并避免在生产环境中禁用 SSL 验证。

相关文章:

  • Linux /etc/fstab文件详解:自动挂载配置指南(中英双语)
  • DDD - 实现限界上下文集成的四种方式
  • 数据库之MySQL——事务(一)
  • 如何使用3D高斯分布进行环境建模
  • 07.Docker 数据管理
  • CORS跨域问题常见解决办法
  • 正确清理C盘空间
  • 使用LangChain构建第一个ReAct Agent
  • 开源的 LLM 应用开发平台-Dify 部署和使用
  • Linux 命令 mount 完全指南(中英双语)
  • 力扣-贪心-376 摆动序列
  • 【云服务器】云服务器内存不够用,开启SWAP交换分区
  • 深蓝学院自主泊车第3次作业-IPM
  • 跟着 Lua 5.1 官方参考文档学习 Lua (6)
  • java网络编程
  • 【Leetcode 每日一题】2506. 统计相似字符串对的数目
  • 前端面试-JavaScript 数据类型检测全解
  • 深入理解设计模式之策略模式
  • DeepSeek写贪吃蛇手机小游戏
  • Linux-Ansible基础模块
  • 2025柯桥时尚周启幕:国际纺都越来越时尚
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电
  • “80后”计算机专家唐金辉已任南京林业大学副校长
  • 习近平同俄罗斯总统普京举行会谈
  • 罗氏制药全新生物制药生产基地投资项目在沪启动:预计投资20.4亿元,2031年投产
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿助力人文学科与社会科学创新