【问题标题】:Only get images of certain size with BeautifulSoup仅使用 BeautifulSoup 获取特定大小的图像
【发布时间】:2017-08-01 00:15:40
【问题描述】:

所以我正在尝试做一个小型爬虫,只选择一些 Google 搜索图像链接,然后下载它们。它不会是任何需要每天运行 1000 次和 1000 次查询的东西,而只是一个简单的脚本,可以为某个搜索词下载 10 张第一张图片。

为此,我有以下代码:

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))

原则上非常简单。但是,我的问题是某些图像只是缩略图,或者图像尺寸很小。所以我的问题是:有没有一种方法可以让我说:“如果宽度

【问题讨论】:

  • 在下载之前您无法判断图像的大小。
  • 但是谷歌可以吗?您可以在搜索时设置图像大小,对吗?那么这里不应该是可能的吗,或者......?
  • 听起来你想要一个会话,并且可能会切换一些设置来过滤图像大小。我非常怀疑谷歌是否提供了一个 API 来从他们的网站上抓取图像,尤其是图像大小的设置,考虑到他们明确禁止从他们的抓取中抓取。
  • 嗯,该死的......然后我必须手动完成。太糟糕了:) 无论如何谢谢...
  • 有时它们有高度和宽度属性

标签: python beautifulsoup web-crawler


【解决方案1】:

我不知道如何使用 beautifulsoup,但是还有另一个名为 ImageScraper 的 python 库可以让您定义最大图像大小

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

我只使用命令行工具对其进行了测试,因为它是 python 2.7,我通常使用 python 3+

【讨论】:

  • 这限制了图像大小(以字节为单位),这可能与给定 DPI 或图像类型的宽度和高度相关,但不是完美的相关性。这需要启发式算法和分类器在下载之前确定图像是否可能高于或低于给定的宽度/高度。
猜你喜欢
  • 2015-03-16
  • 2022-10-02
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多