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