爬取动态渲染网站scrapy接入splash

scrapy结合scrapy-splash

scrapy-splash 的安装

windows下安装并启动
# 拉取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

scrapy集成 scrapy-splash

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值