2017-06-02 42 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