1. 程式人生 > 實用技巧 >python爬蟲最重要的一步(初戀 selenium)

python爬蟲最重要的一步(初戀 selenium)

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:Mshu

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

selenium 是一個web應用測試工具,能夠真正的模擬人去操作瀏覽器。
用她來爬資料比較直觀,靈活,和傳統的爬蟲不同的是,
她真的是開啟瀏覽器,輸入表單,點選按鈕,模擬登陸,獲得資料,樣樣行。完全不用考慮非同步請求,所見即所得。

selenium語言方面支援java/python,瀏覽器方面支援各大主流瀏覽器谷歌,火狐,ie等。我選用的是python3.6+chrome組合

chrome

寫python爬蟲程式之前,需要準備兩樣東西:

1.[chrome][1]/瀏覽器              https://www.google.cn/chrome/
2.[chromedriver][2] /瀏覽器驅動   http://chromedriver.storage.googleapis.com/index.html

瀏覽器和瀏覽器驅動的搭配版本要求比較嚴格,不同的瀏覽器版本需要不同的驅動版本;我的版本資訊:

 chrome info: chrome=66.0.3359.139
 Driver info: chromedriver=2.37.544315 

其他版本對照

chrome瀏覽器

這裡需要注意的是如果想更換對應的谷歌瀏覽器,要高版本的請務必直接升級處理,低版本的解除安裝時要徹底!徹底!徹底!解除安裝,包括(Google升級程式,登錄檔,殘留檔案等),再安裝。否則爬蟲程式啟動不了瀏覽器。

chromedriver瀏覽器驅動

chromedriver 放置的位置也很重要,把chromedriver放在等會要寫的.py檔案旁邊是最方便的方法。當然也可以不放這裡,但是需要配置chromedriver的路徑,我這裡就不介紹這種方法了。

python

終於開始敲程式碼了

開啟網站
from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://segmentfault.com/")

三行程式碼即可自動完成啟動谷歌瀏覽器,輸出url,回車的騷操作。
此時的視窗位址列下方會出現【Chrome 正在受到自動測試軟體的控制】字樣。

提交表單

下面我們來嘗試控制瀏覽器輸入並搜尋關鍵字找到我們這篇文章;
先開啟segmentfault網站,F12檢視搜尋框元素

<input id="searchBox" name="q" type="text" placeholder="搜尋問題或關鍵字" class="form-control" value="">

發現是一個id為searchBox的input標籤,ok

from selenium import webdriver
browser = webdriver.Chrome()   #開啟瀏覽器
browser.get("https://segmentfault.com/")   #輸入url

searchBox = browser.find_element_by_id("searchBox")  #通過id獲得表單元素
searchBox.send_keys("python爬蟲之初戀 selenium")   #向表單輸入文字
searchBox.submit()    #提交


find_element_by_id()方法:根據id獲得該元素。
同樣還有其他方法比如

舉個栗子:

1.find_elements_by_css_selector("tr[bgcolor='#F2F2F2']>td")
  獲得 style為 bgcolor='#F2F2F2' 的tr的子元素td

2.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div[3]/div[1]/div[2]/div/h4/a")
  獲得此路徑下的a元素。
  find_element_by_xpath方法使用谷歌瀏覽器F12選擇元素右鍵copy->copyXpath急速獲得準確位置,非常好用,誰用誰知道
  
3.find_element_by_xpath("..")獲得上級元素

抓取資料

獲得元素後.text方法即可獲得該元素的內容
我們獲得文章的簡介試試:

from selenium import webdriver
browser = webdriver.Chrome()   #開啟瀏覽器

browser.get("https://segmentfault.com/")   #輸入url
searchBox = browser.find_element_by_id("searchBox")  #通過id獲得表單元素
searchBox.send_keys("python爬蟲之初戀 selenium")   #向表單輸入文字
searchBox.submit()                                #提交

text = browser.find_element_by_xpath("//*[@id='searchPage']/div[2]/div/div[1]/section/p[1]").text
print(text)


除了捕獲元素還有其他的方法:

啟動前新增引數

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--proxy-server=http://101.236.23.202:8866")  //代理
chromeOptions.add_argument("headless")   //不啟動瀏覽器模式

不載入圖片啟動

def openDriver_no_img():
    options = webdriver.ChromeOptions()
    prefs = {
        'profile.default_content_setting_values': {
            'images': 2
        }
    }
    options.add_experimental_option('prefs', prefs)
    browser = webdriver.Chrome(chrome_options=options)
    return browser