Selenium自動化測試工具,支持多種瀏覽器,主要用來解決JavaScript渲染的問題
需要的工具:Pycharm、python37、Chromedriver環境配置好、Chrome瀏覽器、Selenium庫、MongoDB可視化工具、pymongo庫
參考的書籍:python3網絡爬蟲開發與實戰---崔大神
Selenium+Chrome爬取淘寶美食並存入MongoDB數據庫中
流程框架:
- 搜索關鍵詞:利用Selenium驅動瀏覽器搜索關鍵詞,得到查詢後的商品列表
- 分析頁碼並翻頁:得到商品頁碼數,模擬翻頁,得到後續頁面的商品列表
- 分析提取商品內容:利用PyQuery分析源碼,解析得到商品列表
- 存儲至MongoDB,該商品列表信息存儲到數據庫MongoDB
源代碼在最下方,直接可以運行,不能運行的話,網頁就是變化了,自己改一下對應網頁變化的地方。
希望看到此文章的,學習到一點也是很好的。
還需要改進的地方:自動輸入賬號,密碼,點擊登錄。試了一下,自動輸入賬號和密碼時,滑塊自動鬆開了,也會出現失敗。然後自己又試手動滑動滑塊,也會出現失敗。又想到一個方法,點擊支付寶登錄,輸入支付寶賬號密碼,這種驗證碼tesserocr庫識別準確率也不會太高,可以提交給商家識別,能完成自動化爬取。我是手機掃二維碼才進入淘寶頁面,所以下面這部分代碼我把刪除呢。
如果有想用PhantomJS(無界面瀏覽器)來提高抓取速度,這裏行不通,因爲需要手機掃碼才能登錄
正文開始:
1、首先測試一下,selenium庫能否驅動Chrome瀏覽器,彈出瀏覽器窗口,說明配置正常(在這裏最好關閉Chrome自動更新,不然Chromedriver版本會與Chrome版本不匹配)
2、打開Chrome瀏覽器,搜索Chromedriver,可以看到它的具體詳情功能。(VPN推薦:http://coolgay.xyz/ 3塊錢一個月,挺好用,如果關閉VPN發現百度連不上,需要自己關閉代理,有時候會出現沒有自動關閉代理),如果沒有下載,可以在上面下載與你谷歌瀏覽器相對應的版本
3、搜索Python Selenium文檔(https://selenium-python-zh.readthedocs.io/en/latest/waits.html),選擇第五個,瞭解顯示等待和隱式等待的區別,複製粘貼顯示等待的代碼
4、打開淘寶頁面,點擊箭頭選擇器放在搜索框,可以對應到源代碼。右擊源代碼部分,點擊Copy,再選擇Copy selector。By後改成CSS_SELECTOR,將雙引號裏的改成剛纔Copy的元素。意思是等待頁面加載完成,首先獲取頁碼輸入框,賦值爲input。
5、上面是輸入框,下面就需要提交按鈕,與上一步是一樣的,右擊對應源代碼部分,Copy,Copy selector。可以看到文檔裏有點擊按鈕的功能element_to_be_clickable,將雙引號裏面的替換掉按鈕的元素。意思是獲取“確定”按鈕,賦值爲submit
6、因爲WebDriverWait(browser, 10)後面會經常用到,這裏改寫一下,意思是等待加載時間,使用WebDriver()對象,可以指定等待條件,同時指定一個最長等待時間,這裏設置的是10s。EC也是改寫的,不然寫expected_conditions太長,意思是如果在這個時間內匹配了等待時間,也就是說頁面元素成功加載出來了,即立即返回相應結果並繼續向下執行,否則到了最大等待時間還沒有加載出來時,就直接拋出超時異常
7、在輸入框中輸入美食兩個字,並且點擊搜索按鈕提交。可以看文檔中有參考。main方法調用search方法,運行該程序,可以看到自動彈出Chrome瀏覽器。我這邊是手機掃碼進去的。
8、這一步測試一下翻頁的操作,選擇器移到藍色陰影的部分,點擊確定,還要比對一下是否已經翻頁,還需要與頁數高亮的部分進行配對,如果頁數與高亮部分一樣,說明翻頁成功。運行程序可以看到Chrome瀏覽器一直在進行翻頁操作
9、對每一頁的寶貝進行解析,打印輸出信息。該方法在點擊美食頁面加載完成調用一次,在點擊下一頁頁面加載完成時,再調用一次。代碼省略,下面我會把源代碼放在github,並且有詳細註解
10、下面是把解析打印出來的數據存儲到MongoDB中,save_to_mongo方法放在get_products方法中調用,因爲要將數據傳入MongoDB中。可以看到打印出來的信息與MongoDB數據庫中數據一樣
詳細代碼在GitHub:https://github.com/15160200501/TaoBao/blob/master/TaoBao.py