<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 中運行 Pyppeteer 的那些坑

          共 3155字,需瀏覽 7分鐘

           ·

          2020-07-27 17:28


          閱讀本文大概需要 2 分鐘。


          之前開發(fā)了一個工具包 GerapyPyppeteer,GitHub 地址為 https://github.com/Gerapy/GerapyPyppeteer,這個包實現(xiàn)了 Scrapy 和 Pyppeteer 的對接,利用它我們就可以方便地實現(xiàn) Scrapy 使用 Pyppeteer 爬取動態(tài)渲染的頁面了。

          另外,很多朋友在運行爬蟲的時候可能會使用到 Docker,想把 Scrapy 和 Pyppeteer 打包成 Docker 運行,但是這個打包和測試過程中大家可能會遇到一些問題,在這里對 Pyppeteer 打包 Docker 的坑簡單做一下總結(jié)。

          概述

          Pyppeteer 打包 Docker 主要是有這么幾個坑點:

          ?依賴沒有安裝,導(dǎo)致無法正確安裝和啟動 Pyppeteer。?沒有關(guān)閉沙盒模式,導(dǎo)致可能出現(xiàn) Browser closed unexpectedly 錯誤?沒有提前安裝好 Pyppeteer,導(dǎo)致每次啟動時都要重新安裝

          下面我們分別對三個問題做下簡單的 Troubleshooting。

          安裝依賴

          首先說第一個,安裝依賴。

          因為 Docker 大部分都是基于 Linux 系統(tǒng)的,比如我常用的基礎(chǔ)鏡像就是?python:3.7,屬于 Debian 系列,當(dāng)然還有很多其他的版本,具體可以查看 https://hub.docker.com/_/python 了解下。

          但是對于 Pyppeteer 來說,python:3.7?內(nèi)置的依賴庫并不夠,我們還需要額外進(jìn)行安裝,安裝完畢之后還需要清空下 apt list,一句 Dockerfile 命令如下:

          RUN apt-get update && \  apt-get -y install libnss3 xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \  libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \  libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \  libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \  libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && \  rm -rf /var/lib/apt/lists/*

          關(guān)閉沙盒模式

          在 Docker 中如果直接啟動 Pyppeteer,我們還需要關(guān)閉沙盒模式,否則可能會遇到如下錯誤:

          pyppeteer.errors.BrowserError: Browser closed unexpectedly:[0924/153706.301300:ERROR:zygote_host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180

          這里提示我們要關(guān)閉沙盒模式,這里只需要在啟動 Pyppeteer 的時候,給 launch 方法的 args 參數(shù)多加一個?--no-sandbox?即可,寫法如下:

          browser = await pyppeteer.launch(options={'args': ['--no-sandbox']})

          這樣就不會再遇到上面的錯誤了。

          提前安裝

          另外建議在打包 Docker 的時候就提前把 Pyppeteer 提前安裝好,可以單獨使用一句 RUN 命令安裝即可。

          RUN pip install -U pip && pip install pyppeteer && pyppeteer-install

          這里是提前安裝了一下 Pyppteer 這個 Python 庫,然后利用 Python 庫提供的 pyppeteer-install 命令提前下載了 Chromium 瀏覽器。

          這樣后面啟動的時候就可以直接喚起 Chromium 瀏覽器進(jìn)行爬取了。

          總結(jié)

          最后看下完整 Dockerfile,內(nèi)容如下:

          FROM python:3.7
          RUN apt-get update && \ apt-get -y install libnss3 xvfb gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \ libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 \ libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \ libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 \ libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget && \ rm -rf /var/lib/apt/lists/*
          RUN pip install -U pip && pip install pyppeteer && pyppeteer-install
          WORKDIR /codeCOPY requirements.txt .RUN pip install -r requirements.txtCOPY . .CMD python3 run.py

          這里首先就是安裝了必須的依賴庫,然后安裝了 Pyppeteer 并下載了 Chromium 瀏覽器,最后拷貝項目運行即可。

          當(dāng)然最后的一句 CMD 大家可以隨意指定入口。

          最后大家可以體驗一個實例來感受下 Scrapy 和 Pyppeteer 對接后在 Docker 中的運行效果:

          docker run germey/gerapy-pyppeteer-example

          如果大家對 Scrapy 和 Pyppeteer 感興趣也可以看下我寫的這個庫 GerapyPyppeteer,GitHub 地址為 https://github.com/Gerapy/GerapyPyppeteer,感謝支持!




          崔慶才丨靜覓

          隱形字

          同名公眾號「崔慶才丨靜覓」


          在這里分享自己的一些經(jīng)驗、想法和見解。


          長按識別二維碼關(guān)注




          好文和朋友一起看~
          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人AV一区二区三区四区 | 欧美性爱日韩 | a网站在线观看 | 四季AV之日韩人妻无码 | 人人摸天天插天天射天天爽 |