Python爬虫:爬取百度图片(selenium模拟登录,详细注释)
1、驱动下载百度图片这种网站是动态的,即并不是网页中的内容全部存储在源代码中,而是不停地动态刷新,所以需要使用selenium模拟浏览器登录,除了安装selenium库之外,还需要针对不同地浏览器安装不同的驱动。驱动安装(含网址)传送门在此:传送门2、python代码话不多说,直接上代码,由于是几年前写得代码了,模块化程度很low,各位将就看吧!注意代码中存放图片的文件路径。运行代码之后,电脑会自
·
1、驱动下载
百度图片这种网站是动态的,即并不是网页中的内容全部存储在源代码中,而是不停地动态刷新,所以需要使用selenium模拟浏览器登录,除了安装selenium库之外,还需要针对不同地浏览器安装不同的驱动。
驱动安装(含网址)传送门在此:
2、python代码
话不多说,直接上代码,由于是几年前写得代码了,模块化程度很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()
更多推荐
已为社区贡献1条内容
所有评论(0)