質問: 上記サイトで紹介されている「APIを叩かずにGoogleから画像収集する」コードを引用しています。デスクトップに `image` フォルダを作り、その中の `image.py` で作業を行なっています。 コード自体にエラーは起こりませんが、ターミナルにて実行すると以下のような結果になり、`image` フォルダには `cat` というフォルダは作成されるのですが、画像が一切保存されません。 なぜこのような結果になるのでしょうか。ご教授願います。 **実行結果** ``` $hogeMacBook-ea:image hiroki$ python image.py -t cat -n 10 Begining searching cat -> No more images -> Found 0 images -------------------------------------------------- Complete downloaded ├─ Successful downloaded 0 images └─ Failed to download 0 images ```
回答: おそらく Google のスクレイピング対策でタグ/クラス/id等の名前が書き換えられているものと思われます。 そのため、該当するデータが見つからないことになっているのでしょう。 この辺の記事を参照してください。 Google検索結果のスクレイピングができない。 python, BeautifulSoupでgoogle検索のタイトル取得できない PythonスクレイピングでGoogle検索画面情報取得 googleニュースのスクレイピングのやり方 例えば`def image_search(self, query_gen, maximum):`の以下の部分の途中のデータに`print()`を入れてみればわかるでしょう。 > > > ``` > # search > html = self.session.get(next(query_gen)).text > soup = BeautifulSoup(html, "lxml") > elements = soup.select(".rg_meta.notranslate") > jsons = [json.loads(e.get_text()) for e in elements] > image_url_list = [js["ou"] for js in jsons] > > ``` > > `html`や`soup`には何らかのデータが入りますが、`elements`は空のリストになります。 つまりスクレイピング結果には".rg_meta.notranslate"で示されるデータは存在しないのでしょう。 対策的には以下のいずれかが考えられるでしょう。 1. 正式にGoogleの検索APIを使う 2. `soup`には何らかのデータが入っているので、その中身を固定の名前ではなく何番目のデータかを抽出するとか正規表現で検索するとかして抜き出す 3. Selenium+WebDriverで人間がアクセスしているように見せかけて固定の名前を使ってデータを抜き出す