[python爬虫] 爬取图片无法打开或已损坏的简单探讨

本文探讨了使用Python爬虫下载百度、搜狗、谷歌镜像图片时遇到的“无法打开图片或已损坏”问题,分析了urllib.urlretrieve()和urllib2.urlopen()的局限性,并提供了利用Selenium和F12审查元素解决方法,强调了真实图片URL隐藏在"data-objurl"属性中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨。同时,作者将进一步帮你巩固selenium自动化操作和urllib库等知识。
        感谢朋友"露为霜"的帮助!希望以后能实现强大的图片爬虫代码~

一. 引入Selenium自动爬取百度图片

        下面这部分Selenium代码的主要功能是:
            1.先自动运行浏览器,并访问百度图片链接:http://image.baidu.com/
            2.通过driver.find_element_by_xpath()函数获取输入框的位置;
            3.在输入框中自动输入搜索关键词"邓肯",再输入回车搜索"邓肯"相关图片;
            4.再通过find_element_by_xpath()获取图片的原图url,这里仅获取一张图片;

            5.调用urllib的urlretrieve()函数下载图片。
        最后整个动态效果如下图所示,但是图片却无法显示:


        代码如下:

# -*- coding: utf-8 -*-
import urllib
import re
import time
import os
from selenium import webdriver          
from selenium.webdriver.common.keys import Keys 
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains         

#Open PhantomJS
#driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")  
driver = webdriver.Firefox() 
wait = ui.WebDriverWait(driver,10)

#Search Picture By Baidu
url = "http://image.baidu.com/"
name = u"邓肯"
driver.get(url)
elem_inp = driver.find_element_by_xpath("//form[@id='homeSearchForm']/span[1]/input")  
elem_inp.send_keys(name)  
elem_inp.send_keys(Keys.RETURN)
time.sleep(5)

#Get the URL of Pictures
#elem_pic = driver.find_element_by_xpath("//div[@class='imgpage']/ul/li/div/a")
elem_pic = driver.find_element_by_xpath("//div[@class='imgpage']/ul/li/div/a/img")
elem_url = elem_pic.get_attribute("src")
print elem_url

#Download Pictures
driver.get(elem_url)
urllib.urlretrieve(elem_url,"picture.jpg")
print "Download Pictures!!!"

二. 简单分析原因及知识巩固

       1.urllib.urlretrieve()
       通过urlretrieve()函数可设置下载进度发现图片是一下子就加载的。这里给大家巩固这个urlretrieve函数的方法和Python时间命名方式,代码如下:

# -*- coding: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值