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