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


測試環境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0

測試網址:http://tieba.baidu.com/p/2827883128

目的是下載該網頁下所有圖片,共160+張。可以分為以下幾步:

1、獲取網頁源代碼。

發現直接通過urllib2或者request獲取到的源代碼和實際圖片對應不起來,通過chrome審查元素功能可以查詢到對應的圖片,猜測是該頁面的圖片加載是通過ajax異步傳輸的。因此使用工具selenium + chromedriver實現。安裝好selenium+chromedriver之后,即可獲取到需要的源代碼。

2、分析獲取到的源代碼,找出圖片的實際地址然后下載。過程與python爬蟲2——下載文件類似。之前分析源碼都是直接通過正則表達式實現,建議學習下beautifulsoup(現在就去),更方便。

實際程序運行后發現,只能獲取到40張圖片。原因是頁面加載完成后,只有40張圖片。如果需要獲取全部圖片,需要在頁面加載完成之前,手動往下滑動滾輪,之后瀏覽器繼續發送ajax請求給服務器,獲取其他的圖片。該方法實際測試可行,可以獲取全部圖片。

但是!手動操作這種方法太low了!以下是我的猜想:1、是否可以直接通過分析源代碼中的js部分,直接提取出所有向后台服務器發送ajax請求的代碼,一次性發送出去從而得到所有圖片的地址? 2、是否可以通過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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM