2017-04-06 362 views
1

我使用Python来下载谷歌艺术一个网页(如Portrait of Anthony Valabrègue),其中包含像斑点图片:img src = blob:如何下载图片?

<img src="blob:https://www.google.com/c8c0132a-1ab7-453b-844c-0aab6449af69"> 

我怎样才能下载此图片?使用URL blob:https://www.google.com/c8c0132a-1ab7-453b-844c-0aab6449af69直接下载不起作用。所述图像由它们位于DIV使用XPath

$x('//*[@id="yDmH0d"]/div/div/div[1]/div/div[1]/div[4]/div[11]') 

图像存储在blob第6块。

理想情况下,我希望能够使用scrapy库从网页下载此类图像。我知道如何为常规网址做到这一点,但不适用于blob:https

是的,有一个简单的方法可以找到一个常规链接到这个网页上的小型图像。但我想获得更高的分辨率,这就是为什么我需要下载存储在blob s中的6个不同的瓷砖。

+0

我怀疑实际图像的位由JavaScript填补,而不是其他访问。 – 9000

+0

@ 9000,有没有办法让这从python? (可能会从python调用一些JavaScript)。我刮了一个大网站,并希望使用'scrapy'库。 – Temak

+0

你可以发布什么网站你刮?通常你可以请求'src',然后将'response.body'保存到文件中。 – Granitosaurus

回答

0

我想你是在错误的地方寻找你的形象。
您正在抓取的网站充满了javascript混乱,这使得它有点难以通过dom检查找到图像,所以在这种情况下,您需要挖掘源页面本身。你可以找到你正在寻找这个特定的图像

一个地方是在<meta>标签:

def parse(self, response): 
    item = response.xpath('//meta[@property="og:image"]/@content').extract_first() 
    #'https://lh5.ggpht.com/-HvgLbwqJ7Yy1iF9imtgsGhVDBDafmvTnDRZSCKl_PNjMT_KXaoNLuO4A7tb4Q' 
    yield Request(item, self.parse_image) 

def parse_image(self, response): 
    with open('image.jpg', 'w') as f: 
     f.write(response.body) 
+0

对不起,以前没有说清楚,但我特别想**提取6块瓷砖并缝合它们,因为这会产生**更高分辨率的图像**。是的,我看到我可以找到一个小图片的定期链接。 – Temak