Python+Selenium模擬人工抓取數據

Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建迴歸測試檢驗軟件功能和用戶需求。支持自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。

1、安裝Python3.5或以上版本

打開https://www.python.org/

Win:根據你的Windows版本(64位還是32位)從Python的官方網站下載Python,運行下載的exe安裝包。特別要注意勾上Add Python 3.X to PATH,然後點“Install Now”即可完成安裝。

Mac:  系統自帶的Python版本是2.X,從Python官網下載Python 3.X的安裝程序,下載後雙擊運行並安裝會替換掉2.X;

2、安裝selenium

Win:pip install selenium

Mac:  pip3 install selenium

3、安裝webdriver

推薦Chrome,http://chromedriver.storage.googleapis.com/index.html

webdriver瀏覽器版本對應

Webdriver版本    支持的Chrome版本
v2.41    v67-69
v2.40    v66-68
v2.39    v66-68
v2.38    v65-67
v2.37    v64-66
v2.36    v63-65
v2.35    v62-64
v2.34    v61-63
v2.33    v60-62

Win:複製webdriver到Python安裝目錄下

Mac:複製webdriver到/usr/local/bin目錄下

4.運行

啓動Chrome瀏覽器:

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

 5.實踐,根據課程列表,抓取每節課介紹詳情

# -*- coding: utf-8 -*-
from selenium import webdriver #調用 Chrome 瀏覽器
from selenium.webdriver.common.keys import Keys #調用鍵盤按鍵操作需要引入keys 包
from selenium.webdriver.common.action_chains import ActionChains #鼠標事件
from selenium.webdriver.support import expected_conditions as EC #expected_conditions判斷當前頁面的是否有XX。由於這個模塊名稱比較長,所以爲了後續的調用方便,重新命名爲EC了
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait #顯性等待,程序每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到超過設置的最長時間
import os,time

browser = webdriver.Chrome() #打開谷歌
browser.implicitly_wait(30)  # 隱性等待,最長等30秒
browser.get("https://www.beijingfundtown.com/cloud-class/course") #輸入地址
#'''判斷是否至少有1個元素存在於dom樹中,如果定位到就返回列表'''
instance = WebDriverWait(browser,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.cur-left-con')))
# browser.minimize_window() #將瀏覽器最小化顯示
opt = webdriver.ChromeOptions()            # 創建Chrome參數對象
opt.headless = True              # 把Chrome設置成可視化無界面模式,windows/Linux 皆可
# for循環enumerate()(單詞意思是枚舉的意思)是python中的內置函數
for i, ins in enumerate(instance):
    try:
        href = ins.find_element_by_tag_name('a').get_property('href')
        # ins.click()
        b = webdriver.Chrome(options=opt) #把Chrome設置成可視化無界面模式
        b.get(href)
        time.sleep(1)
        print(b.find_element_by_id("desc").text)
        b.quit()
    except Exception as e:
        print(str(e)+str(i))
    time.sleep(1)
#browser.maximize_window() # 瀏覽器全屏顯示

time.sleep(1)
browser.quit()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章