python爬取https网站出现错误

在进行Python爬虫开发时,我们有时会爬取一些https网站,这时候可能会遇到一些错误。本文将就这个问题进行一些详细的说明,并介绍Python自带的一些库。

一、爬取https网站出现的错误

1. SSL证书验证错误

由于https协议要求服务器返回的证书必须是经过权威CA机构授权的,因此如果我们自己在爬虫中发起请求时,没有携带正确的证书或者证书不受浏览器信任,就会遇到证书验证错误。这时候我们可以通过设置验证策略来跳过证书验证,代码如下所示:

```

import urllib.request

import ssl

context = ssl._create_unverified_context()

response = urllib.request.urlopen(url, context=context)

```

2. DNS解析错误

当我们尝试从https网站下载内容时,发现程序无法解析域名或者解析超时,这可能是由于DNS服务器无法解析该名称,或者DNS服务器返回的IP地址被防火墙过滤了。我们可以在代码中关闭DNS缓存,代码如下所示:

```

import urllib.request

import socket

socket.setdefaulttimeout(20) #设置超时时间

urllib.request.socket.setdefaulttimeout(20)

urllib.request.urlcleanup() #清除缓存

response = urllib.request.urlopen(url)

```

3. HTTP Error 403: Forbidden

当我们尝试访问https网站时,可能会发现程序返回了HTTP Error 403: Forbidden的错误。这是因为该网站在服务器端设置了一些安全措施,禁止了程序的访问。我们可以在程序中模拟浏览器访问,伪装成人类用户,代码如下所示:

```

import urllib.request

import urllib.error

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'

}

req = urllib.request.Request(url=url, headers=headers)

try:

response = urllib.request.urlopen(req)

except urllib.error.HTTPError as e:

if e.code == 403:

pass

```

4. Connection reset by peer

当我们向https网站发起请求时,可能会出现Connection reset by peer的错误。这是因为服务器端将连接重置了,可能是由于服务器端限制了连接数或者访问频率。我们可以设置一个sleep延迟,让程序暂停一段时间后再次尝试发起请求,代码如下所示:

```

import time

import urllib.request

import urllib.error

while True:

try:

response = urllib.request.urlopen(url)

break

except urllib.error.URLError as e:

print(e)

time.sleep(5)

continue

```

二、Python自带的库

1. urllib

Python标准库中提供了urllib库,它是一个URL处理库,可以用来抓取URL内容、进行URL解析、发送HTTP请求等操作。其中urllib.request模块可以用来发送HTTP/HTTPS请求。

2. requests

Python标准库中的urllib虽然功能强大,但是使用起来比较麻烦,如果我们只是需要进行简单的HTTP/HTTPS请求,我们可以使用requests库。requests是一个第三方库,是一个简单易用的HTTP请求库,支持HTTP/HTTPS等协议。

3. ssl

ssl是Python标准库中提供的一个库,用于安全套接字层的操作。在爬取https网站时,我们可能会遇到SSL证书验证错误,可以使用ssl._create_unverified_context()来跳过证书验证。

4. socket

socket是Python标准库中提供的一个库,用于实现网络通信相关的功能。我们可以通过该库中的方法设置超时时间、关闭DNS缓存、设置socket的缓冲区大小等参数。

5. time

time是Python标准库中提供的一个库,用于实现和时间有关的功能。在爬取https网站时,我们可能会被服务器限制连接数或访问频率,可以使用time.sleep()来设置程序的停留时间。

总结:

本文主要介绍了Python爬取https网站出现错误时的解决方法,并简单介绍了Python标准库中的一些常用库。在进行爬虫开发时,我们需要根据实际情况选择合适的库和解决办法,提高程序的可靠性和稳定性。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(26) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部