Python爬虫:爬取百度图片(selenium模拟登录,详细注释)

news/2024/7/19 9:53:07 标签: selenium, python, chrome, 爬虫

1、驱动下载

百度图片这种网站是动态的,即并不是网页中的内容全部存储在源代码中,而是不停地动态刷新,所以需要使用selenium模拟浏览器登录,除了安装selenium库之外,还需要针对不同地浏览器安装不同的驱动。

驱动安装(含网址)传送门在此:

传送门

python_8">2、python代码

话不多说,直接上代码,由于是几年前写得代码了,模块化程度很low,各位将就看吧!

  1. 注意代码中存放图片的文件路径。
  2. 运行代码之后,电脑会自动打开浏览器,且会模仿人浏览浏览器的操作,静静看着就好!
python">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()

http://www.niftyadmin.cn/n/1037213.html

相关文章

D. Jongmah

题目 题意: 有n个数,对于每个数i,可以自己用3个来形成一个答案,或者是用连续的3个数形成一个答案。输出最多的答案数。     1≤n,m≤106,1≤ai≤m1≤n,m≤10^6,1≤a_i≤m1≤n,m≤106,1≤ai​≤m 分析: 对于每一个…

Python zip*用法(一行代码实现矩阵的旋转)

1、ZIP函数 ZIP函数是Python中的一个内置函数,在Python 2.X的版本中返回的是一个列表,Python 3.X版本中返回的是一个zip迭代器对象。 ZIP函数的具体用法 a [1,2,3] b [4,5,6] for x,y in zip(a,b):print(x,y)预计的返回结果 1 4 2 5 3 6很显然&am…

E. Trips(set删边+分析)

题目 题意&#xff1a; 有n个人&#xff0c;每一天都有两个人成为好朋友。现在需要安排旅行&#xff0c;对于每个人来说&#xff0c;如果他要去&#xff0c;那么他的朋友至少有k个都要去。输出每一天最多能安排的人。     2≤n≤2⋅105,1≤m≤2⋅105,1≤k<n2≤n≤2⋅10…

Python isdigit()方法能处理带符号的数字字符串么?

isdigit()方法 Python isdigit() 方法检测字符串是否只由数字组成。 语法 str.isdigit()参数与返回值 不需要传入参数。 返回值为bool类型。True则说明该字符串只包含数字。 实例 str "123456"; print (str.isdigit())str "hello world!" print (…

D. Sequence Sorting

题目2 题意&#xff1a; 给定n个元素&#xff0c;存在重复。每次操作可以把一种元素放到数组的最前面或最后面。要求输出最少的操作次数使得数组有序。 分析&#xff1a; 考虑那些没有被操作的元素&#xff0c;那么他们必然是连续的一段相互不相交且元素紧挨着增大的的序列(紧…

A. Feeding Chicken

题目 题意&#xff1a; 给定一个n*m的矩阵&#xff0c;矩阵上有的地方有米。你一共有k只小鸡&#xff0c;现在你需要分配他们的地方。要求不能同一个格子分配给两只小鸡&#xff0c;每个格子都要分配&#xff0c;且每只鸡分配到的位置是联通的&#xff0c;使得能吃到最多米的和…