【发布时间】:2021-02-18 14:41:00
【问题描述】:
我已经在这个问题上苦苦挣扎了一段时间。我正在尝试构建一个 Docker 容器,该容器使用 selenium Webdriver 抓取一些数据,但我收到一条错误消息,指出驱动程序不可调用。检查:
> [stage-1 6/6] RUN python db_starter.py:
#10 35.99 Traceback (most recent call last):
#10 35.99 File "db_starter.py", line 3, in <module>
#10 35.99 run_backend.update_db()
#10 35.99 File "/app/run_backend.py", line 11, in update_db
#10 35.99 search_page = donwload_search_page(query, page)
#10 35.99 File "/app/get_data.py", line 19, in donwload_search_page
#10 35.99 soup = BeautifulSoup(html, 'html.parser')
#10 35.99 TypeError: 'module' object is not callable
这是我的 Dockerfile,我用 Chrome 和 Firefox 都试过了,错误是一样的:
FROM scrapinghub/scrapinghub-stack-scrapy:1.3
from python:3.7-slim
COPY . /app
WORKDIR /app
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates curl firefox-esr \
&& rm -fr /var/lib/apt/lists/* \
&& curl -L https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-linux64.tar.gz | tar xz -C /usr/local/bin \
&& apt-get purge -y ca-certificates curl
RUN pip install --no-cache-dir -r requirements.txt
RUN python db_starter.py
这里是代码崩溃的地方:
import requests as rq
import bs4 as BeautifulSoup
import time
import os
from selenium import webdriver
def donwload_search_page(query, page):
options = webdriver.FirefoxOptions()
options.add_argument("--window-size 1920,1080")
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
url = "https://www.amazon.com/s?k={query}&page={page}".format(query = query, page = page)
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
driver.close()
time.sleep(2)
return soup.text
我真的不明白为什么它说模块不可调用,我在我的机器上运行代码,在文件夹中有 geckodriver 的 jupyter 笔记本中运行它,当用于尝试构建容器时,它返回这个错误。
谁能帮我解决这个问题?
谢谢!
【问题讨论】:
-
向我们展示您的导入以及是否有任何分配给
BeautifulSoup。 -
你能包含更多的python代码吗?特别是
import行? -
我已经添加了导入行。 @克劳斯
标签: python docker selenium-webdriver beautifulsoup wsl-2