内容:爬取想要的百度图片,并存入文件夹
所需软件:PyCharm 或 VSCode (能跑python就行),Chrome浏览器


目录

  • 小准备:
  • 下载selenium、wget库
  • 下载ChromeDriver
  • 代码
  • 原理



 

小准备:

下载selenium、wget库

打开PyCharm,点击最下面的terminal,在终端下输入pip install selenium, 自动安装selenium库;再次输入pip install wget,自动安装wget库,ok。

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_经验分享


python爬虫程序下载网页上内容 实例 python爬虫怎么下载_python_02

下载ChromeDriver

先看看Chrome浏览器的版本

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_爬虫_03

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_网络爬虫_04


接着要去下载 ChromeDriver,浏览器打开 https://sites.google.com/chromium.org/driver/ ,

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_python_05

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_网络爬虫_06


根据自己的电脑配置下载,window64的选win32就行。建议解压到一个好找的地方,因为代码里面需要它的绝对路径。

 

代码

PyCharm里新建一个文件夹,再新建一个.py文件,把下面代码复制进去,修改一下chromedriver执行文件的路径,Run!

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import os
import wget


PATH = "D:/PyCharm_project/爬虫/chromedriver.exe"         #chromedriver的执行文件路径
driver = webdriver.Chrome(PATH)                          #创建一个chrome浏览器对象

driver.get("https://image.baidu.com/")                   #浏览器打开的网页地址,这里是百度图片,目前可爬
print(driver.title)                                      #把网页的标题打印一下

time.sleep(1)                                            #延迟一秒让网页完全加载,其实可以删掉
search = driver.find_element_by_name("word")             #通过搜索框元素的name找到搜索框
search.clear()                                           #清空一下搜索框的内容
search.send_keys("星空")                                  #输入搜索内容
search.send_keys(Keys.RETURN)                            #模拟按下回车

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "main_img"))          #延时直到页面显示出图片,代码是不断找class为"main_img"的元素,对应就是图片;找不到就10秒后退出
)

for i in range(2):                                                       #因为百度图片第一次加载进去智慧显示20来张图片,鼠标要不断下滑才能加载出更多图片,这里就是模拟鼠标下滑,滑2次,如果想加载更多图片可以把数字调大
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(1)

imgs = driver.find_elements_by_class_name("main_img")                    #将所有图片的信息都存入imags这个列表里

path = os.path.join("星空")                                               #这两行是在当前路径下创建名为星空的文件夹
os.mkdir(path)

count = 0                                                                #定义一个计数变量来为图片计数
for img in imgs:                                                         #依次下载图片,并存入刚创建的文件夹
    print(img.get_attribute("src"))                                      #打印出图片的src,也就是图片的链接
    if "http" in img.get_attribute("src"):                               #因为有些图片的链接会不规范,wget会识别不了使代码中断,所以这里判断一下
        save_as = os.path.join(path, "星空" + str(count) + '.jpg')        #规定图片的绝对路径
        wget.download(img.get_attribute("src"), save_as)                 #wget下载图片,从获取的src下载到规定的绝对路径
        count += 1                                                       #每成功下载一次计数值加1


# driver.back()               #返回
# driver.forward()            #前进
# driver.quit()               #退出

你会发现代码的同目录下多了一个星空的文件夹,里面是快速白嫖的图片!

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_python_07


 

原理

其实原理都在代码注释里面了,主要讲讲怎么查找网页元素的class和name等,

先进入https://image.baidu.com/,然后按F12,就可以查看网页的html代码。

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_爬虫_08


先找找搜索框元素的name,按下这个符号:

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_网络爬虫_09

然后鼠标指到搜索框的位置

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_经验分享_10


直接就定位到了它的name,就是word,代码里面就是根据word这个name来抓到搜索框。

同理,我们输入星空按回车后,

python爬虫程序下载网页上内容 实例 python爬虫怎么下载_经验分享_11


直接看到了图片的class,就是main_img和img-hover,这俩定位任何一个都行,然后你试试看看每一张图片的class,都是这俩,所以这些图片都属于一个class,即我们可以通过定位这个class来抓取所有图片!

如果有帮助可以点个赞哦哈哈,我主页里也有其他有趣的内容,欢迎来逛逛!