7.1.1 requests 配置代理
import requests
proxy=’127.0.0.1:1080’
proxies={
‘http’:proxy,
‘https’:proxy
}
res=requests.get(‘http://httpbin.org/get',proxies=proxies)
print(res.text)
如果代理需要认证,同样在代理的前面加上用户名密码即可 代理的写法就变成如下所示:
proxy= ‘username:password@127.o.o.1:9743 ‘
selenium chrome() 设置代理
import requests
from selenium import webdriver
proxy='127.0.0.1:1080'
chrome_option=webdriver.ChromeOptions()
chrome_option.add_argument('--proxy-server=http://'+proxy)
browser=webdriver.Chrome(chrome_options=chrome_option)
browser.get('http://httpbin.org/get')
PhantomJS
对于 PhantomJS 来说,代理设置方法可以借助 service_args 参数,也就是命令行参数。 代
理设置, 方法如下所示:
import requests
from selenium import webdriver
service_args=[
'--proxy=127.0.0.1:1080',
'--proxy-type=http'
]
browser=webdriver.PhantomJS(service_args=service_args)
browser.get('http://httpbin.org/get')
print(browser.page_source)
免费代理池:proxypool
下载地址:
https://github.com/jhao104/proxy_pool/
https://github.com/Python3WebSpider/ProxyPool
7.2.1 常规方式运行
如果不使用 Docker 运行,配置好 Python、Redis
环境之后也可运行,步骤如下。
7.2.2
安装和配置 Redis
https://github.com/microsoftarchive/redis/releases/
本地安装
Redis、Docker 启动 Redis、远程 Redis
都是可以的,只要能正常连接使用即可。
首先可以需要一下环境变量,代理池会通过环境变量读取这些值。
设置 Redis 的环境变量有两种方式,一种是分别设置 host、port、password,另一种是设置连接字
符串,设置方法分别如下:
设置 host、port、password,如果 password 为空可以设置为空字符串,示例如下:
export REDIS_HOST=’localhost’
export REDIS_PORT=6379
export REDIS_PASSWORD=’’
export REDIS_DB=0
或者只设置连接字符串:
export REDIS_CONNECTION_STRING=’redis://[password]@host:port/db’
如果没有密码也要设置为:
export REDIS_CONNECTION_STRING=’redis://@host:port/db’
这里连接字符串的格式需要符合 redis://[password]@host:port/db 的格式,注意不要遗漏 @。
以上两种设置任选其一即可。
7.2.3 安装依赖包
这里强烈推荐使用 Conda 或 virtualenv 创建虚拟环境,Python 版本不低于 3.6。
然后
pip 安装依赖即可:
pip3 install -r requirements.txt
pip install -r requirements.txt -i https://pypi.douban.com/simple
7.2.4 运行代理池
两种方式运行代理池,一种是 Tester、Getter、Server 全部运行,另一种是按需分别运行。
一般来说可以选择全部运行,命令如下:
python run.py
运行之后会启动 Tester、Getter、Server,这时访问 http://localhost:5555/random 即可获取一个随
机可用代理。
或者如果你弄清楚了代理池的架构,可以按需分别运行,命令如下:
python3 run.py —processor getter
python3 run.py —processor tester
python3 run.py —processor server
这里 processor 可以指定运行 Tester、Getter 还是 Server。
7.2.5 使用成功运行之后可以通过 http://localhost:5555/random 获取一个随机可用代理。
可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程
import requests
proxypool_url = 'http://127.0.0.1:5555/random'
target_url = 'http://httpbin.org/get'
def get_random_proxy():
""" get random proxy from proxypool :return: proxy """
return requests.get(proxypool_url).text.strip()
def crawl(url, proxy):
""" use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html """
proxies = {'http': 'http://' + proxy}
return requests.get(url, proxies=proxies).text
def main():
""" main method, entry point :return: none """
proxy = get_random_proxy()
print('get random proxy', proxy)
html = crawl(target_url, proxy)
print(html)
if __name__ == '__main__':
main()
运行结果如下:
get random proxy 116.196.115.209:8080
{
“args”: {},
“headers”: {
“Accept”: “/“,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.22.0”,
“X-Amzn-Trace-Id”: “Root=1-5e4d7140-662d9053c0a2e513c7278364”
},
“origin”: “116.196.115.209”,
“url”: “https://httpbin.org/get“