質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4779閲覧

Python3で画像収集したいのですがエラーが出ます。

chrokurojp

総合スコア26

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/04/08 11:55

編集2017/04/08 21:34

Python使ってYahoo画像検索の画像を自動で収集してみた
http://tomoprog.hatenablog.com/entry/2016/02/13/024004

まとめサイトから画像をスクレイピングする[python]
http://www.mathgram.xyz/entry/scraping/matome

上記2つのサイトを参考にpythn3で画像収集したいのですが、同じエラーが出てしまいます。
同じ症状にあったかたいらっしゃいませんか

どうやらbeautyfulsoupが原因っぽい

ModuleNotFoundError: No module named 'html.entities'; 'html' is not a package

環境
python3 --version
Python 3.6.1

pip3 freeze | grep beautifulsoup
beautifulsoup4==4.5.3

【追加質問です。】
上記は解決しました。

下記を実行するとプログラムが置かれたフォルダ直下に保存される為、
f = open(os.path.basename("./static/"+resource), "wb")
と書き換えれば指定ディレクトリに保存できる考えたのですが
うまく行きませんでした。

アドバイスお願いします


「f = open("./static/"+os.path.basename(resource), "wb")」
にする事で解決できました

web_crawler.py

python3 web_crawler.py "https://search.yahoo.co.jp/image/search?ei=UTF-8&fr=sfp_as&aq=-1&oq=&ts=1609&p=%E8%B5%B0%E3%82%8C%EF%BC%81 %E3%80%80%E3%82%B3%E3%83%BC%E3%83%89%E5%AD%A6%E5%9C%92&meta=vc%3D" .jpeg,.jpg
#-*- coding:utf-8 -*- import os import sys import time import bs4 import urllib.request def crawring(url, extensions): """ Content: クローリング Param: url: クローリングするURL extensions: 取得するリソースの拡張子(list) """ # 指定したURLのHTMLを取得 html = get_html_string(url) if len(html) < 1: print("HTMLが取得できませんでした。") print("URLを確認してください。") sys.exit(1) # リソース取得 get_resource(html, extensions) def get_resource(html, extensions): """ Content: リソース取得 Param html: HTML extensions 拡張子のリスト """ resource_list = [] soup = bs4.BeautifulSoup(html,'lxml') for a_tag in soup.find_all("a"): href_str = a_tag.get("href") try: (path, ext) = os.path.splitext(href_str) if ext in extensions: resource_list.append(href_str) except: pass resource_list = sorted(set(resource_list), key=resource_list.index) for resource in resource_list: try: print("download ---> [%s]" % os.path.basename(resource)) request = urllib.request.urlopen(resource) f = open(os.path.basename("./static/"+resource), "wb") f.write(request.read()) except Exception as e: print(e) print("download failed ... [%s]" % os.path.basename(resource)) finally: time.sleep(3) def get_html_string(url): """ Content: HTML取得 Param: url HTMLを取得するURL """ decoded_html = "" # HTMLを取得 try: request = urllib.request.urlopen(url) html = request.read() except: return decoded_html # エンコードを取得 enc = check_encoding(html) if enc == None: return decoded_html # HTMLをデコード decoded_html = html.decode(enc) return decoded_html def check_encoding(byte_string): """ Content: 文字コード確認 Param: byte_string: バイト文字列 """ encoding_list = ["utf-8", "utf_8", "euc_jp", "euc_jis_2004", "euc_jisx0213", "shift_jis", "shift_jis_2004","shift_jisx0213", "iso2022jp", "iso2022_jp_1", "iso2022_jp_2", "iso2022_jp_3", "iso2022_jp_ext","latin_1", "ascii"] for enc in encoding_list: try: byte_string.decode(enc) break except: enc = None return enc def check_args(): """ Content: 起動引数確認 """ if len(sys.argv) == 3: return True else: return False def print_usage(): print("Usage: %s URL Extensions" % __file__) print("URLにはクロールしたいウェブサイトのアドレスを指定してください。") print("Extensionsにはクロールしたときに取得するファイルの拡張子を指定してください。") print("Extensionsはカンマ区切りで複数指定できます。") def main(): """ Content: main """ # 引数確認 if check_args() is False: print_usage() sys.exit(1) url = sys.argv[1] extensions = sys.argv[2].split(",") # クロール開始 crawring(url, extensions) if __name__ == "__main__": main()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tell_k

2017/04/08 18:21

エラーを再現できるような、最初のコード例があると回答がつきやすいです。少なくとも上記参考URLには「html.entities」を参照するようなコードは見当たりませんでした。
yukkeorg

2017/04/09 00:05

追加質問以下の部分に関しましては、最初の質問とは異なるものですので、別途、「質問する」から質問してください。
guest

回答1

0

ベストアンサー

ファイル名をhtml.pyにしていたり、カレントディレクトリにhtmlディレクトリがあったりしませんか?

投稿2017/04/08 12:27

driller

総合スコア720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chrokurojp

2017/04/08 20:58

すいません。ファイル名をhtml.pyにしていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問