python爬蟲3——獲取審查元素(板野友美吧圖片下載)

測試環境: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()
相關文章
相關標籤/搜索