get_attribute('src') 不再得到 url

get_attribute('src') is not getting the url anymore

我写了一个脚本,用于使用 selenium webdriver 在 google 图像上抓取图像。网络驱动程序浏览图像并获取 url。但是,今天当我 运行 脚本时,它没有得到任何图像的 url。

from selenium import webdriver
import urllib.request
from PIL import Image
import os


keyword=input('keyword : ')
n=150
url=input('url : ')

# provide path to dircetory before running the code
path='E://Old//cust_data'

if keyword not in os.listdir(path):
    os.mkdir(path+'//'+keyword)

img_dir=path+'//'+keyword

driver=webdriver.Chrome('E://Old//card//chromedriver.exe')
driver.get(url)



i=1
j=1
while j<=n:

    try:
        driver.find_element_by_xpath('//*[@id="islrg"]/div[1]/div[{}]/a[1]/div[1]/img'.format(i)).click()
        img=driver.find_element_by_xpath('//*[@id="Sva75c"]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div/div[2]/a/img')
        link=img.get_attribute('src')
        print(link)
        urllib.request.urlretrieve(link,img_dir+'//'+keyword+' '+str(j)+'.jpg')

        size=os.stat(img_dir+'//'+keyword+' '+str(j)+'.jpg').st_size

        if size<15000:
            os.remove(img_dir+'//'+keyword+' '+str(j)+'.jpg')
        else:
            im=Image.open(img_dir+'//'+keyword+' '+str(j)+'.jpg')
            print(keyword+' '+str(j)+'.jpg',(im.size[0],im.size[1]))
            j+=1
        i+=1


    except:
        i+=1
        print('error')
        pass

driver.close()

每张图片 returns 'error'。它工作正常,我不知道是什么原因造成的。此外,在导航时,网络驱动程序有时会停止。没有任何错误或任何错误,它只是停止了。

我认为首先要检查的是抛出了什么异常,因为异常可能出现在其他地方,例如,在文件保存过程中。

尝试添加:

try:
    ...
except Exception as e:
    print("Error with exception: ", e)

这将为您提供有关问题所在的信息。

第二个问题是您的搜索方法,尽量避免类似的搜索 ("//*[@id="islrg"]/div[1]/div[{} ]/a[1]/div[1]/img") 并搜索更具体的模式。

最后要指出的是您正在使用的工具。正如您所描述的,您所需要的只是从页面获取图像。使用 Web scraping 库(例如 BeatifulSoup)可以更高效地完成此任务,而不是像 Selenium 那样使用汽车。

作为你的问题的例子,我写了一个小脚本,可以使用 bs4 在一秒钟内从页面上抓取所有图像:

import requests # to download HTML file
from bs4 import BeautifulSoup as bs # to parse data

a = requests.get("some URL") # download html

soup = bs(a.text) # feed it to BeautifulSoup
all_imgs = soup.find_all("img") # extract all images

img_urls = []

for img in all_imgs: # iterate over all images
    img_urls.append(img.get("src")) # append to list img "scr" attribute value

注意事项:

当使用这种方法下载普通 HTML 时,有时它可能与您在浏览器中打开相同 URL 时看到的不同,所以在创建这样的 scraper 尝试:

with open("test.html", "w") as f:
    f.write(page.text)

然后在浏览器中检查此文件以找到获取所需信息的方法。