如何在win10pro下配置docker及scrapy-splash

docker

1:进入官网下载并安装docker: https://www.docker.com/ (PS: 运行docker很占内存)
2:在安装过程中需要重启,之后便是配置国内镜像源
3.右键右下角的Docker Desktop图标->settings->Deamon,在“Registry mirrors:”中输入镜像加速器地址
这里以阿里云为例:
创建账号并登录->产品与服务->容器镜像服务->镜像加速器->加速器地址
形如:https://xxxxxxxx.mirror.aliyuncs.com
复制加速器地址到上面提到过的“Registry mirrors”文本框中,点击Apply,等待docker加载完成
至此,docker已经配置好了国内镜像源
4.此时,按道理来说已经可以在cmd命令行中通过输入“docker pull scrapinghub/splash”来获取splash镜像了,但是请先完成以下步骤
右键右下角的Docker Desktop图标->settings->Network->DNS Server,勾选 Fixed:8.8.8.8
5.至此,docker终于配置好了

scrapy-splash

进入命令行界面
step.1: 输入“docker pull scrapinghub/splash”,等待下载完成
step.2:输入“docker run -p 8050:8050 scrapinghub/splash”,把此界面挂在后台

爬取需要js动态渲染的网页

观察是否能输出渲染后的网页内容而不是网页源码
别忘了在PyCharm中引入scrapy-splash包(File->settings->Project: pro_name->Project Interpreter,点击右边的“+”搜索“scrapy-splash”,点击下方“Install Package”)
导入包后,使用scrapy_splash.SplashRequest() 获取经过js渲染后的网页代码
这里以我的scrapy项目为例:

spid. py

import scrapy
from scrapy_splash import SplashRequest

class SpidSpider(scrapy.Spider):
    name = 'spid'
    allowed_domains = ['google.com']
    start_urls = ['https://www.google.com/']

    def start_requests(self):
        url ='https://www.google.com/'
        yield SplashRequest(url,callback=self.parse,args={'wait': 0.5},dont_filter=True)
特别注意!!!

最后一行中的一个参数很有灵性
args={'wait': 0.5}
如果没有这个参数,网页可能会来不及渲染,返回的仍是未经js渲染的初始页面代码!
大家不要和我一样踩了这个坑…

settings. py

SPLASH_URL = 'http://localhost:8050'#添加splash服务器地址

DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

DOWNLOADER_MIDDLEWARES = {
    #添加splash middleware
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

Terminal:

scrapy crawl spid -s JOBDIR=crawls/spid-1	

结果:成功

PS:如何科学上网,我之前的一篇文章有写~

你可能感兴趣的:(如何在win10pro下配置docker及scrapy-splash)