python+selenium爬取关键字搜索google图片

  1 # -*- coding: utf-8 -*-
  2
  3 import json
  4 import os
  5 import time
  6 from multiprocessing import Pool
  7 import multiprocessing
  8 import requests
  9 from selenium import webdriver
 10
 11
 12 def get_image_links(keyword, num_requested = 1000):
 13     """get image links with selenium
 14     """
 15     number_of_scrolls = int(num_requested/400) + 1
 16     img_urls = set()#设置为集合,自动去除重复链接
 17     chrome_options = webdriver.ChromeOptions()
 18     # chrome_options.add_argument(‘--headless‘)#设置无头浏览器
 19     # chrome_options.add_argument(‘user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"‘)
 20     # chrome_options.add_argument("lang=en_US")#设置语言
 21     # prefs = {"profile.managed_default_content_settings.images":2}
 22     # chrome_options.add_experimental_option("prefs",prefs)#配置不加载图片
 23     driver = webdriver.Chrome(chrome_options=chrome_options)
 24     driver.maximize_window()
 25     search_query = keyword
 26     url = "https://www.google.com/search?q="+search_query+"&source=lnms&tbm=isch"
 27     driver.get(url)
 28     for _ in range(number_of_scrolls):
 29         for i in range(5):
 30             # multiple scrolls needed to show all 400 images
 31             driver.execute_script("window.scrollBy(0, 100000)")
 32             time.sleep(1)
 33         time.sleep(5)#等待页面刷新,否则有可能元素不可见
 34         try:
 35             # driver.find_element_by_xpath("//input[@value=‘Show more results‘]").click()#浏览器的中英文版本不同
 36             driver.find_element_by_xpath("//input[@value=‘显示更多结果‘]").click()
 37         except Exception as e:
 38             print("reach the end of page ")
 39             break
 40
 41     # with open(‘page.html‘,‘w‘) as f:
 42     #     f.write(driver.page_source)
 43     imgs = driver.find_elements_by_xpath(‘//div[contains(@class,"rg_meta")]‘)#模糊定位
 44     for i,img in enumerate(imgs):
 45         img_url = json.loads(img.get_attribute(‘innerHTML‘))["ou"]
 46         img_urls.add(img_url)
 47     driver.quit()
 48     print("finish getting all image urls!")
 49
 50     return img_urls
 51
 52 def download(urls,download_dir):
 53     ‘‘‘download images
 54     ‘‘‘
 55     print("start downloading images!")
 56     for url in urls:
 57         filename=os.path.join(download_dir,os.path.basename(url))
 58         try:
 59             r = requests.get(url, stream=True, timeout=60)
 60             r.raise_for_status()
 61             with open(filename, ‘wb‘) as f:
 62                 f.write(r.content)
 63         except Exception:
 64             continue
 65     print("finish downloading images!")
 66
 67 keywords = [‘girl‘,‘boy‘]
 68 download_dir = ‘./images/‘
 69 download_dirs = []
 70 for keyword in keywords:
 71     path = os.path.join(download_dir,keyword)
 72     download_dirs.append(path)
 73     if not os.path.exists(path):
 74         os.makedirs(path)
 75
 76 # for keyword in main_keywords:
 77 #     image_urls = get_image_links(keyword)
 78 #     download(image_urls,download_dir)
 79
 80
 81 ###################################
 82 # get image links/MultiProcess
 83 ###################################
 84 img_urls=[]
 85 multiprocessing.freeze_support()
 86 p = Pool(4) # default number of process is the number of cores of your CPU, change it by yourself
 87 for keyword in keywords:
 88     img_urls.append(p.apply_async(get_image_links, (keyword,)))
 89 #img_urls:[<multiprocessing.pool.ApplyResult object at 0x7f536925fcc0>, <multiprocessing.pool.ApplyResult object at 0x7f536925fd68>]
 90 for i,urls in enumerate(img_urls):
 91     img_urls[i]=urls.get()
 92 p.close()
 93 p.join()
 94
 95
 96 # # ###################################
 97 # # # download images/MultiProcess
 98 # # ###################################
 99 p = Pool(4) # default number of process is the number of cores of your CPU, change it by yourself
100 for i,urls in enumerate(img_urls):
101     p.apply_async(download, [urls,download_dirs[i]])
102 p.close()
103 p.join()

原文地址:https://www.cnblogs.com/buyizhiyou/p/11140128.html

时间: 2024-10-27 15:55:58

python+selenium爬取关键字搜索google图片的相关文章

python selenium爬取kuku漫画

在爬取这个网站之前,试过爬取其他网站的漫画,但是发现有很多反爬虫的限制,有的图片后面加了动态参数,每秒都会更新,所以前一秒爬取的图片链接到一下秒就会失效了,还有的是图片地址不变,但是访问次数频繁的话会返回403,终于找到一个没有限制的漫画网站,演示一下selenium爬虫 # -*- coding:utf-8 -*- # crawl kuku漫画 __author__='fengzhankui' from selenium import webdriver from selenium.webdr

python+selenium爬取百度文库不能下载的word文档

有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可以正常使用的浏览器,这里推荐chrome,一个与浏览器同版本的驱动,这里提供一个下载驱动的链接https://chromedriver.storage.googleapis.com/77.0.3865.40/chromedriver_win32.zip 首先我们来看一下百度文库中这一篇文章https

python — selenium爬取微博指数

---恢复内容开始--- 需要用到的工具:python(pymouse.selenium).chrome.webdriver 使用的webdriver一定要和chrome的版本相匹配,具体的对应关系可以参考以下博客:http://blog.csdn.net/goblinintree/article/details/47335563.为了避免这个问题,最好直接使用最新的chrome和最新的webdriver. 以下代码是PyMouse的源码 # -*- coding: iso-8859-1 -*-

python selenium爬取QQ空间方法

from selenium import webdriver import time # 打开浏览器 dr = webdriver.Chrome() # 打开某个网址 dr.get('https://user.qzone.qq.com/2330331400/main') # 切换框架 dr.switch_to_frame('login_frame') time.sleep(1) dr.find_element_by_link_text('帐号密码登录').click() # 输入账号 dr.fi

Python——selenium爬取斗鱼房间信息

1 from selenium import webdriver 2 import os 3 import json 4 import time 5 6 7 class Douyu: 8 def __init__(self): 9 # 1.发送首页的请求 10 self.driver = webdriver.Chrome('../chromedriver.exe') 11 self.driver.get('https://www.douyu.com/g_yz') 12 13 # 获取页面内容 1

[Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)

这篇文章主要讲述了使用python+selenium爬取新浪微博的热点话题和评论信息.其中使用该爬虫的缺点是效率极低,傻瓜式的爬虫,不能并行执行等,但是它的优点是采用分析DOM树结构分析网页源码并进行信息爬取,同时它可以通过浏览器进行爬取中间过程的演示及验证码的输入.这篇文章对爬虫的详细过程就不再论述了,主要是提供可运行的代码和运行截图即可.希望文章对你有所帮助吧~ 参考文章 [python爬虫] Selenium爬取新浪微博内容及用户信息 [Python爬虫] Selenium爬取新浪微博客户

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

python爬虫——爬取NUS-WIDE数据库图片

实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm   由于这个数据只给了每个图片的URL,所以需要一个小爬虫程序来爬取这些图片.在图片的下载过程中建议使用VPN.由于一些URL已经失效,所以会下载一些无效的图片. 1 # PYTHON 2.7 Ubuntu 14.04 2 nuswide = "$NUS-WIDE-urls_ROOT" #the location of your nu

python爬取某个网站的图片并保存到本地

python爬取某个网站的图片并保存到本地 #coding:utf-8 import urllib import re import sys reload(sys) sys.setdefaultencoding('gb2312') #获取整个页面的数据 def getHtml (url): page = urllib.urlopen(url) html = page.read() return html #保存图片到本地 def getImg(html): reg = r'src="(.+?\.