2017-06-02 103 views
0

我处理了几网,让我有到图像 绝对路径列表,用下面的代码:获取绝对路径的图像,而不是blank.gif

for img in images: 
    try: 
     if img["src"].startswith("http"): 
     abs_img_url = img["src"] 
     else: 
     abs_img_url = urljoin(url, img["src"]) 
    except KeyError: 
     # src attribute does not exist 
     continue 

问题是与这webpage,我会得到很多blank.gif图像,虽然浏览器将显示其他文件,它存储在 img["data-original"]属性。令人惊讶的是,Firefox检查员 在img["src"]中显示正确的图像,但当您查看源 时,您在img["data-original"]中看到它。

你能解释一下这个问题吗?你会如何对待它? 检测并下载正确的图像,而不是blank.gif

例如图像元件给予坏的结果:

<img alt="browser cache backend" class="lazy aligncenter size-full wp-image-57323" data-original="http://11986-presscdn-0-77.pagely.netdna-cdn.com/wp-content/uploads/2008/06/browser-cache-backend.jpg" height="190" itemprop="image" sizes="(max-width: 540px) 100vw, 540px" src="http://11986-presscdn-0-77.pagely.netdna-cdn.com/wp-content/themes/online-tech-tips-2013/images/blank.gif" srcset="http://11986-presscdn-0-77.pagely.netdna-cdn.com/wp-content/uploads/2008/06/browser-cache-backend.jpg 540w, http://11986-presscdn-0-77.pagely.netdna-cdn.com/wp-content/uploads/2008/06/browser-cache-backend-300x106.jpg 300w, http://11986-presscdn-0-77.pagely.netdna-cdn.com/wp-content/uploads/2008/06/browser-cache-backend-80x28.jpg 80w" width="540"/> 

回答

1

的事情是,JavaScript是改变源从data-original属性到动态加载的src属性,并且由于BeautifulSoup不处理JS,最终会导致图像无效的src属性。考虑到这一点,你有2个选项,要么解析data-original属性,要么在解析Selenium或CasperJS或PhantomJS之类的页面之前,将你的方法改变为处理JS代码的东西。

我认为寻找正确的属性是一个好方法,不会让你的刮板过于复杂。

my_images = [] 

for img in images: 
    try: 
     if img['src'].endswith('blank.gif'): 
      my_images.append(img['data-original']) 
     else: 
      my_images.append(img['src']) 
    except KeyError: 
     continue 

my_abs_images = [img if img.startswith('http') else urljoin(url, img) for img in my_images] 
1

尝试增加一个条件用于检测阉羊如果图像被称为blank.gif:

for img in images: 
    try: 
     if img["src"].startswith("http"): 

     abs_img_url = img["src"] 

     if img["src"][-9:]=='blank.gif': 
      abs_img_url = img["data-original"] 
     else: 
     abs_img_url = urljoin(url, img["src"]) 
    except KeyError: 
     # src attribute does not exist 
     continue