赞
踩
百度图片这种网站是动态的,即并不是网页中的内容全部存储在源代码中,而是不停地动态刷新,所以需要使用selenium模拟浏览器登录,除了安装selenium库之外,还需要针对不同地浏览器安装不同的驱动。
驱动安装(含网址)传送门在此:
话不多说,直接上代码,由于是几年前写得代码了,模块化程度很low,各位将就看吧!
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys import time import requests def getnamepage(name): b.get('http://image.baidu.com/') search_box=b.find_element_by_id('kw') # 找到搜索框对应的位置(可以在搜索框位置右键查看元素) search_box.send_keys(name) # 将搜索关键词输入搜索框 search_box.send_keys(Keys.ENTER) # 回车 time.sleep(5) # 休眠5秒钟,可要可不要,休眠的目的是为了防反爬虫 def download(imglist,num): ele=b.find_element_by_id('sizeFilter') # 找到选取尺寸的位置 ActionChains(b).move_to_element(ele).perform() # 鼠标在选择尺寸的位置悬停 time.sleep(5) ele4=b.find_element_by_xpath('//*[@id="sizeFilter"]/div/ul/li[3]') # 找到特大尺寸的位置 ActionChains(b).move_to_element(ele4).perform() # 鼠标悬停 time.sleep(5) ele4.click() # 鼠标左击,选择最大尺寸 time.sleep(5) #打开第一张图片,在此界面中点击左右切换图片 ele1=b.find_element_by_xpath('/html/body/div[2]/div[2]/div[4]/div/ul/li[1]/div[1]/a/img') ele1.click() b.switch_to.window(b.window_handles[1])#很重要的一步,切换窗口,否则页面找不到元素,python shell里面是b.switch_to_window x=1 for i in range(1,num+1): #ele3=b.find_element_by_xpath('/html/body/div[1]/div[2]/div/span[2]/span') #ele3.click() #time.sleep(3)#为保险起见,设置一个睡眠和爬取的时间差 ele2=b.find_element_by_xpath('//*[@id="currentImg"]') # 找到图片链接所在的字符串 img=ele2.get_attribute('src') #获取当前图片的url链接 r=requests.get(img) if r.status_code==200: # 判断返回状态码,如果不是200,则无法继续操作 path='D://study/VGG_16//img/9/%d.jpg'%x # 图片存储路径 print('正在爬取 '+img) with open(path,'wb') as f: f.write(r.content) time.sleep(1) f.close() print('爬取成功') x+=1 ele3=b.find_element_by_xpath('/html/body/div[1]/div[2]/div/span[2]/span') ele3.click() #time.sleep(3) #跳到下一张 else: ele3=b.find_element_by_xpath('/html/body/div[1]/div[2]/div/span[2]/span') ele3.click() time.sleep(1) continue if __name__=="__main__": b=webdriver.Chrome() name='李圣经'#定义要搜索的管检测 num=500 # 定义搜索数量 imglist=[] getnamepage(name) download(imglist,num) b.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。