【问题标题】:How to download ALL the pictures of a webpage and save them in their original names?如何下载网页的所有图片并以原始名称保存?
【发布时间】:2014-07-23 14:27:17
【问题描述】:

我编写了一个小的 Python 脚本来使用 selenium 从网站下载图片:

from selenium import webdriver
import urllib.request
class FirefoxTest:
    def firefoxTest(self):
        self.driver=webdriver.Firefox()
        self.driver.get("http://www.sitew.com")
        self.r=self.driver.find_element_by_tag_name('img')
        self.uri=self.r.get_attribute("src")
        self.g=urllib.request.urlopen(self.uri)
        with open("begueradj.png",'b+w') as self.f:
            self.f.write(self.g.read())             
if __name__=='__main__':
    FT=FirefoxTest()
    FT.firefoxTest()

如何修改我的代码以便:

  1. 下载网页上的所有图片?
  2. 不要为我下载的图片命名,而是保留其默认名称?

【问题讨论】:

  • 如果您要手动执行此操作,您能描述一下您将采取的步骤吗?把这些步骤写在一张纸上。开始将这些步骤转化为代码。

标签: python firefox selenium python-3.x selenium-webdriver


【解决方案1】:

您需要切换到find_elements_by_tag_name。对于下载文件,我会使用 urllib.urlretrieve() - 它会为您从 url 中提取文件名:

images = self.driver.find_elements_by_tag_name('img')
for image in images:
    src = image.get_attribute("src")
    if src:
        urllib.urlretrieve(src)

【讨论】:

  • for image in images 周围有一个错误。它说:TypeError: 'WebElement' object is not iterable
  • @begueradj 确保有find_elements_by_tag_name(),而不是find_element_by_tag_name() - 观看s
  • 是的,我确实错过了“s”。我尝试了您的第一个和第二个解决方案:它们都按我的梦想工作。你是这辈子最好的人亚历山大。非常感谢。
【解决方案2】:

您可以使用 Ruby gems nokogiri 打开网页并使用它们的 xpath 下载图像。


require 'open-uri'
require 'nokogiri'

f = open('sample.flv')
begin
    http.request_get('/sample.flv') do |resp|
        resp.read_body do |segment|
            f.write(segment)
        end
    end
ensure
    f.close()
end

【讨论】:

  • 这个问题是python特有的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2019-05-19
  • 2013-03-12
  • 2014-07-12
  • 2015-06-09
  • 2021-11-17
相关资源
最近更新 更多