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)
然后在浏览器中检查此文件以找到获取所需信息的方法。
我写了一个脚本,用于使用 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)
然后在浏览器中检查此文件以找到获取所需信息的方法。