私は小さなクローラを使っていくつかの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その後、スキップ"または何かのようなものですか?
ダウンロードするまでイメージのサイズを教えてください。 – Barmar
でもGoogleはできますか?検索時に画像サイズを設定することはできますか?それはここで可能ではないはずですか... ...? –
セッションが必要なように聞こえ、画像サイズをフィルタリングするためにいくつかの設定を切り替える可能性があります。 Googleが自分のサイトから画像を掻き取るためのAPIを提供していることは疑いがありません。特に画像サイズの設定では、掻き傷からの掻き取りを明示的に禁止していると考えています。 –