python - 使用 Python 抓取 Google 网页时,总是得不到足够的图像和重复的图像?

标签 python google-api web-scraping

我正在尝试通过 Google 进行网络抓取,但我不断收到重复的图像。它下载了大约 200 个,但只有 60 个左右的独特图像。如何获得更多独特的图像并消除重复?

这是我的代码:

import json
import os
import time
import requests
from PIL import Image
from StringIO import StringIO
from requests.exceptions import ConnectionError
import string 
import urllib
import random

def go(query, path):
BASE_PATH = os.path.join(path, query)
if not os.path.exists(BASE_PATH):
os.makedirs(BASE_PATH)

resultitem = 0
file_save_dir = BASE_PATH
filename_length = 10
filename_charset = string.ascii_letters + string.digits
ipaddress = '163.118.75.137'
url = 'https://ajax.googleapis.com/ajax/services/search/images?'\
         'v=1.0&q=' + query + '&start=%d'

while(resultitem < 60):
 response = requests.get(url % resultitem)
 results = json.loads(response.text)
 for result in results['responseData']['results']: 
   print result['unescapedUrl']
   filename = ''.join(random.choice(filename_charset)
                 for s in range(filename_length))
   urllib.urlretrieve (result['unescapedUrl'],
                  os.path.join(file_save_dir, filename + '.png'))
 resultitem = resultitem + 1 # or + 8 Duplicates?

def main():
go('angry human face', 'myDirectory')
if __name__ == "__main__":
main()

最佳答案

问题出在这里:

   filename = ''.join(random.choice(filename_charset)
                 for s in range(filename_length))

它不是唯一的,并且您已覆盖文件。

您应该使用tempfile module相反

或者,由于您真正关心的是唯一的文件名,因此您可以这样做:

 for idx, result in enumerate(results['responseData']['results']): 
   print result['unescapedUrl']
   filename = "IMG%s" % idx

idx 这里将是每个网址的唯一编号

关于python - 使用 Python 抓取 Google 网页时,总是得不到足够的图像和重复的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713687/

相关文章:

php - Gmail API : Insufficient Permission

python - 使用 scrapy 和 Xpath 的空列表

python - 如何从 NFL 赛程表中抓取所有 td 和 tr 数据

python - QtabWidget 和 QMainWindow 在一个类中

python - 具有 REQ 和 REP 套接字的 C++ ZeroMQ 单一应用程序

security - 使用Google Visualization API时,数据是否发送给Google?

java - 使用 Jsoup 抓取网页

python - 将嵌套列表简化为笛卡尔积

Win32Com 的 Python 脚本未在任务计划程序中运行

javascript - Google API 上是否有指向 "latest"jQuery 库的链接?