動態爬蟲花瓣家裝圖片

裝房子時,可能會想收集一些裝修做爲參考圖片,此時能夠利用爬蟲爬取某個關於家裝的專題圖片,在花瓣上找了一個專題,學了下簡單的爬蟲知識,接下來簡單記錄下思路。html

基本步驟

發送請求->獲取到html內容->分析DOM結構->解析DOM結構->正則匹配或其餘庫提取數據->數據後續加工處理python

步驟

找到要爬取的網址, 如家裝專題,該頁面以瀑布流的方式佈局,查看源代碼並分析其佈局,全部的圖片都包裹在一個id爲waterfall的div中瀏覽器

經過xpath得到該div下的全部div,並取得包裹其中的image的縮略圖地址。
但該縮略圖片過小,須要點擊圖片進入到預覽模式,下載其原始尺寸的圖片。佈局

點擊其中一張圖片,打開大圖模式,如:http://huaban.com/pins/1373772751/ ,直接從該地址開始爬取,看不到瀏覽下一張的按鈕(直接瀏覽器打開是看不到左右切換圖片的按鈕)。下一張圖片與當前圖片的id並非連續的,因此只能從縮略圖那裏點擊進入預覽模式,這裏選擇點擊第一張縮略圖得到其大圖頁面的url。url

water_falls = driver.find_elements(By.CLASS_NAME, "cover")
water_falls[0].click()  # 必須從主頁點擊進去,不然大圖頁面不顯示下一張的按鈕

此時須要對瀏覽器進行操做,使用selenium驅動瀏覽器,依次瀏覽全部的圖片3d

right_arrow = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//*[@id='pin_view_layer']/div[3]/a[1]"))
    )
    right_arrow.click()  # 須要自動點擊按鈕顯示下一張

每點擊一次,獲取當前頁面內容,並提取圖片的地址code

html = driver.page_source
    doc = lxml.html.fromstring(html)
    urls = doc.xpath("//*[@id='baidu_image_holder']//img/@src")  # 注意中間有的img外層沒有a標籤

獲取到圖片的url後,下載保存到本地xml

path = r'E:\download_images'  # 圖片保存地址
    is_exists = os.path.exists(path)
    if not is_exists:
        os.makedirs(path)
    img_name = "%d.jpg" % num
    name = os.path.join(path, img_name)
    img_data = requests.get("http://%s" % img_url).content  # 爬取到的url須要添加http://
    with open(name, 'wb') as f:
        f.write(img_data)

最後經過循環定義要下載的數量就OK了。htm

相關文章
相關標籤/搜索