測試環境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0html
測試網址:http://tieba.baidu.com/p/2827883128python
目的是下載該網頁下全部圖片,共160+張。能夠分爲如下幾步:web
一、獲取網頁源代碼。ajax
發現直接經過urllib2或者request獲取到的源代碼和實際圖片對應不起來,經過chrome審查元素功能能夠查詢到對應的圖片,猜想是該頁面的圖片加載是經過ajax異步傳輸的。所以使用工具selenium + chromedriver實現。安裝好selenium+chromedriver以後,便可獲取到須要的源代碼。正則表達式
二、分析獲取到的源代碼,找出圖片的實際地址而後下載。過程與python爬蟲2——下載文件相似。以前分析源碼都是直接經過正則表達式實現,建議學習下beautifulsoup(如今就去),更方便。chrome
實際程序運行後發現,只能獲取到40張圖片。緣由是頁面加載完成後,只有40張圖片。若是須要獲取所有圖片,須要在頁面加載完成以前,手動往下滑動滾輪,以後瀏覽器繼續發送ajax請求給服務器,獲取其餘的圖片。該方法實際測試可行,能夠獲取所有圖片。瀏覽器
可是!手動操做這種方法太low了!如下是個人猜測:一、是否能夠直接經過分析源代碼中的js部分,直接提取出全部向後臺服務器發送ajax請求的代碼,一次性發送出去從而獲得全部圖片的地址? 二、是否能夠經過js或者selenium,在加載頁面的時間段,模擬滾輪動做,從而實現功能。方法2我實際測試了下,因爲水平有限,不熟悉js,沒有成功。附代碼:服務器
# -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome() url = "http://tieba.baidu.com/p/2827883128" driver.get(url) try: # driver.implicitly_wait(20) # driver.find_element_by_id("ag_main_bottombar") # js="var q=document.body.scrollTop=10000" # driver.execute_script(js) sourcePage = driver.page_source soup = BeautifulSoup(sourcePage, "lxml") images = soup.find_all(class_ = "ag_ele_a ag_ele_a_v") print(len(images)) for image in images: print(image) finally: # pass driver.quit()