

<https://your-3d.com/deeplearning-create-dataset/>

上記サイトで紹介されている「APIを叩かずにGoogleから画像収集する」コードを引用しています。デスクトップに `image` フォルダを作り、その中の
`image.py` で作業を行なっています。

コード自体にエラーは起こりませんが、ターミナルにて実行すると以下のような結果になり、`image` フォルダには `cat`
というフォルダは作成されるのですが、画像が一切保存されません。  
なぜこのような結果になるのでしょうか。ご教授願います。

**実行結果**

[code]

    $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
    
[/code]


CC BY-SA 4.0
2020-05-26T01:49:51.257
66990
2020-07-09T04:03:30.280
2020-05-26T11:19:16.597
3060
39664
question
python web-scraping
Google 検索の結果をスクレイピングした時に画像が保存されない


おそらく Google のスクレイピング対策でタグ/クラス/id等の名前が書き換えられているものと思われます。  
そのため、該当するデータが見つからないことになっているのでしょう。

この辺の記事を参照してください。  
[Google検索結果のスクレイピングができない。](https://ja.stackoverflow.com/q/60393/26370)  
[python,
BeautifulSoupでgoogle検索のタイトル取得できない](https://ja.stackoverflow.com/q/59668/26370)  
[PythonスクレイピングでGoogle検索画面情報取得](https://ja.stackoverflow.com/q/57114/26370)  
[googleニュースのスクレイピングのやり方](https://ja.stackoverflow.com/q/61240/26370)

例えば`def image_search(self, query_gen,
maximum):`の以下の部分の途中のデータに`print()`を入れてみればわかるでしょう。

>
[code]

>     # 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]
>  
[/code]

`html`や`soup`には何らかのデータが入りますが、`elements`は空のリストになります。  
つまりスクレイピング結果には".rg_meta.notranslate"で示されるデータは存在しないのでしょう。

対策的には以下のいずれかが考えられるでしょう。

  1. 正式にGoogleの検索APIを使う
  2. `soup`には何らかのデータが入っているので、その中身を固定の名前ではなく何番目のデータかを抽出するとか正規表現で検索するとかして抜き出す
  3. Selenium+WebDriverで人間がアクセスしているように見せかけて固定の名前を使ってデータを抜き出す


CC BY-SA 4.0
2020-05-26T03:32:18.547
66993
2020-05-26T21:19:32.273
2020-05-26T21:19:32.273
26370
26370
66990
answer