beautifulsoupを使って簡単なスクレイピングをしていて、macで構築した環境ではうまく行っていたのですが、dockerに環境構築後、うまくいかなくなってしまったので質問させていただきます。
エラー内容
test.pyというファイルに以下のようなコードを記述しており、dockerではないmacの環境ではスクレイピングに成功しました。
test.py
1from bs4 import BeautifulSoup 2import urllib.request 3from dotenv import load_dotenv 4import os 5import socket 6 7load_dotenv() 8 9suumo_url = os.getenv('SUUMO_URL') 10 11try: 12 req = urllib.request.urlopen(suumo_url, timeout=10).read() 13except socket.timeout: 14 print("timeout") 15 16name = '' 17fee = '' 18address = '' 19 20soup = BeautifulSoup(req, 'html.parser') 21contents = soup.find_all('div', class_='property') 22 23for content in contents: 24 25 if content.select('a.js-cassetLinkHref'): 26 name = content.select('a.js-cassetLinkHref')[0].get_text() 27 28 if content.select('div.detailbox-property-point'): 29 fee = content.select('div.detailbox-property-point')[0].get_text() 30 31 if content.select('td.detailbox-property-col'): 32 address = content.select('td.detailbox-property-col')[4].get_text().strip() 33 34 35 print("場所" + address + " " + name + " 家賃" + fee)
しかし、コンテナ内で実行すると以下のようなエラーが発生。
console
1(コンテナ内)# python test.py 2Traceback (most recent call last): 3 File "/root/suumo/test.py", line 12, in <module> 4 req = urllib.request.urlopen(suumo_url, timeout=10).read() 5 File "/usr/local/lib/python3.9/urllib/request.py", line 214, in urlopen 6 return opener.open(url, data, timeout) 7 File "/usr/local/lib/python3.9/urllib/request.py", line 507, in open 8 req.timeout = timeout 9AttributeError: 'NoneType' object has no attribute 'timeout'
こちらの記事や英語でのurllibに関するページなどを調べましたが、どれもtimeoutに関する設定を記述すればいいというようなことしか書いておらず、それ通りにtry, exceptを使って試してみたのですが、エラー内容は変わらず。
また、パッケージのインストール漏れなどかと思いましたが、下記の通り今回のファイル内で必要なパッケージはインストールされています。
console
1#pip list 2Package Version 3-------------- ------- 4beautifulsoup4 4.9.3 5bs4 0.0.1 6pip 21.2.1 7python-dotenv 0.19.0 8setuptools 57.4.0 9soupsieve 2.2.1 10urllib3 1.26.6 11wheel 0.36.2 12
以下はDockerfile
、docker-compose.yml
です。
Dockerfile
1FROM python:3 2USER root 3 4RUN apt-get update 5RUN apt-get -y install locales && \ 6 localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 7ENV LANG ja_JP.UTF-8 8ENV LANGUAGE ja_JP:ja 9ENV LC_ALL ja_JP.UTF-8 10ENV TZ JST-9 11ENV TERM xterm 12 13RUN apt-get install -y vim less 14RUN pip install --upgrade pip 15RUN pip install --upgrade setuptools
docker
1version: '3' 2services: 3 python3: 4 restart: always 5 build: . 6 container_name: 'python3' 7 working_dir: '/root/' 8 tty: true 9 volumes: 10 - ./suumo:/root/suumo
コンテナ内のpythonのバージョンは3.9.6
、ローカルのpythonのバージョンは3.9.0
です。
以上となります。
ご教授よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。