2017-08-01 26 views
0

私は小さなクローラを使っていくつかのGoogle検索画像リンクを選んでダウンロードしています。 1000回のクエリで1日に1000回実行する必要はありませんが、特定の検索語の最初のイメージを10個ダウンロードするだけの簡単なスクリプトです。そのためにBeautifulSoupで特定のサイズの画像のみを取得する

I持って次のコード:だから、基本的に

import requests 
from bs4 import BeautifulSoup 
import json 
import urllib 

s = requests.session() 
s.headers.update({"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"}) 

URL = "https://www.google.dk/search" 

def get_images(query, start): 
    images = [] 

    screen_width = 1920 
    screen_height = 1080 
    params = { 
     "q": query, 
     "sa": "X", 
     "biw": screen_width, 
     "bih": screen_height, 
     "tbm": "isch", 
     "ijn": start/100, 
     "start": start, 
     #"ei": "" - This seems like a unique ID, you might want to use it to avoid getting banned. But you probably still are. 
    } 

    request = s.get(URL, params=params) 
    bs = BeautifulSoup(request.text, "lxml") 

    for img in bs.findAll("div", {"class": "rg_meta"}): 
     js = json.loads(img.text) 

     images.append(js['ou']) 


    return images 

私は、その後を解析し、このコードを経由してダウンロードすることができますリンクのリストを取得する場所があるどのように多くの1からそれでも名前の画像現在クロールされています:

searchlist = ["cats"] #search strings 
nr_img = 5 #number of images to be crawled 

for k, searchstring in enumerate(searchlist): 
    k += 0 
    images = get_images("{}".format(searchstring), 0) 

    img_nr_list = [] 
    for n, x in enumerate(images[0:nr_img]): 
     n += 1+k*nr_img 
     urllib.urlretrieve("{}".format(x), "\foo\bar\{}.jpg".format(n)) 
     img_nr_list.append("{}.jpg".format(n)) 

原則的にはかなりストレートです。しかし、私の問題は、一部の画像はサムネイルだけであるか、画像サイズが小さいことです。だから私の質問です:私は何かのように言うことができる方法はありますか: "幅< 600pxと高さ< 400pxその後、スキップ"または何かのようなものですか?

+1

ダウンロードするまでイメージのサイズを教えてください。 – Barmar

+0

でもGoogleはできますか?検索時に画像サイズを設定することはできますか?それはここで可能ではないはずですか... ...? –

+0

セッションが必要なように聞こえ、画像サイズをフィルタリングするためにいくつかの設定を切り替える可能性があります。 Googleが自分のサイトから画像を掻き取るためのAPIを提供していることは疑いがありません。特に画像サイズの設定では、掻き傷からの掻き取りを明示的に禁止していると考えています。 –

答えて

0

私はbeautifulsoupでそれを行う方法がわからない、しかし、あなたは私が唯一のコマンドラインを使用してそれをテストした最大画像サイズ

https://pypi.python.org/pypi/ImageScraper

を定義することができますImageScraperと呼ばれる別のPythonライブラリがありますツール、それはPython 2.7で、私は通常Python 3以上です

+1

これは、イメージサイズをバイトで制限します。これは、指定されたDPIまたはイメージタイプでの幅と高さに相関する可能性がありますが、完全な相関はありません。これは、ヒューリスティックおよび分類器が、ダウンロード前に画像が所定の幅/高さ以上である可能性があるかどうかを判断することを必要とする。 –

関連する問題