使用 Python + Clash,爬取外网数据
有的时候,希望能够爬取一些外网的数据,但是开启Clash
之类的软件后,发现会直接报requests.exceptions.ProxyError
的错误。解决方法的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import requests
import urllib3
# 设置了verify=False后(在后面)会有警告,关闭警告
urllib3.disable_warnings()
url = "https://www.google.com"
# Clash默认的代理端口为7890
proxies = {
'http': 'http://127.0.0.1:7890/',
'https': 'http://127.0.0.1:7890/'
}
response = requests.get(url=url, verify=False, proxies=proxies)urllib.request
中的getproxies
获取系统Web代理信息。当未开启代理时,返回空字典,开启代理时,返回如下的字典:
1
2
3
4
5{
'http': 'http://127.0.0.1:7890',
'https': 'https://127.0.0.1:7890',
'ftp': 'ftp://127.0.0.1:7890'
}urllib3.disable_warnings()
这样的代码也不够优雅。使用httpx
则不用设置urllib3.disable_warnings()
、verify=False
。
1
2
3
4
5
6
7
8from urllib.request import getproxies
import httpx
response = httpx.get(
"https://www.google.com/",
proxy=getproxies().get("http")
)Client
,和requests
的session
基本一致
1
2
3
4
5
6
7
8
9from urllib.request import getproxies
import httpx
client = httpx.Client(
proxy=getproxies().get("http")
)
response = client.get("https://www.google.com/")