# 拉取splash
docker pull scrapinghub/splash
# 运行splash
docker run -p 8050:8050 --name splash scrapinghub/splash
docker run -itd --name splash -p 8050:8050 scrapinghub/splash --disable-lua-sandbox bash
docker run -itd --name splash -p 8050:8050 scrapinghub/splash bash
# 宿主机网络
docker run -itd --name splash -p 8050:8050 --network=host scrapinghub/splash bash
# -p 向外暴露端口
# -d 守护进程方式运行(后台运行)
# --name 自定义昵称
# --disable-lua-sandbox 关闭沙盒模式。如果是在测试环境上可以直接去体验一下,功能更全。如果是在开发环境的话那就直接用正式的,虽然花里胡哨,但安全性并不好
进入容器
docker exec -it [容器名] bash
kill所有容器进程
docker kill $(docker ps -a -q)
delete所有容器
docker rm $(docker ps -a -q)
执行容器,传递环境变量 -e
docker run -itd --name splash -e http_proxy="127.0.0.1:10809" -e https_proxy="127.0.0.1:10809" -p 8050:8050 scrapinghub/splash bash
需要访问谷歌等网站
执行容器,传递环境变量 -e
docker run -itd --name splash -e http_proxy=127.0.0.1:10809 -p 8050:8050 scrapinghub/splash bash
或者
进入容器
docker exec -it [容器名] bash
export http_proxy=127.0.0.1:10809
问题:localhost:port无法访问,但在容器内 curl 可以访问
无法访问 splash,windows下可能是因为访问地址ip有问题
docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker
docker-machine ip default
显示 docker 机器的默认ip,一般是 192.168.99.100
https://github.com/Dreamacro/clash/releases/tag/v1.14.0
pip安装
pip3 install scrapy-splash
项目 settings 配置
# splash
SPLASH_URL = 'http://192.168.99.100:8050'
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
代码中使用 SplashRequest 类
from scrapy_splash import SplashRequest
# 原本是yield Request()
yield SplashRequest()
yield SplashRequest(url, headers=headers, dont_filter=True)
windows 用 cmd 的 curl
set http_proxy=127.0.0.1:1080
set https_proxy=127.0.0.1:1080
全局配置
设置环境变量 HTTP_PROXY HTTPS_PROXY