selenium簡介
Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否可以很好得工做在不一樣瀏覽器和操做系統之上。測試系統功能——建立迴歸測試檢驗軟件功能和用戶需求。支持自動錄製動做和自動生成 .Net、Java、Perl等不一樣語言的測試腳本。html
github地址:github.com/SeleniumHQ/…python
爲何selenium能夠用在爬蟲領域?
通常的寫爬蟲的方法是用python腳本直接對目標網站進行訪問,並且只對目標數據進行採集,訪問速度很快,這樣目標網站很容易就識別出你是機器人,而後把你封鎖了~~而使用selenium寫爬蟲,python腳本操控瀏覽器進行訪問,也就是說python腳本和目標網站之間多了個瀏覽器的操做,這樣的行爲更像是人類行爲。這樣不少難爬的網站也能夠垂手可得的抓數據了。git
使用selenium前的準備
selenium基本知識
from selenium import webdriver
from bs4 import BeautifulSoup
初始化瀏覽器
driver = webdriver.Firefox()
打開某個網址
driver.get(url)
複製代碼
#這裏是根據xpath輸入帳號和密碼的
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("你的帳號")
driver.find_element_by_xpath(xpath).clear()
driver.find_element_by_xpath(xpath).send_keys("你的密碼")
#定位「點擊登陸」框的位置的xpath,經過click()執行登陸
driver.find_element_by_xpath(xpath).click()
複製代碼
#獲取該網頁的源碼
driver.get(url)
html = driver.page_source
bs4 = BeautifulSoup(html,'lxml')
複製代碼
selenium使用
## 引入WebDriver的包
from selenium import webdriver
## 建立瀏覽器對象
browser = webdriver.Firefox()
## 打開百度網站
browser.get('https://www.baidu.com/')
複製代碼
效果:自動打開瀏覽器,而後打開百度首頁
複製代碼
from selenium import webdriver
## 建立瀏覽器對象
browser = webdriver.Firefox()
## 打開小米社區網站
browser.get('https://passport.csdn.net/account/login')
browser.find_element_by_xpath("//*[@id='username']").clear()#清空輸入框
browser.find_element_by_xpath("//*[@id='username']").send_keys("你的帳號")#輸入帳號
browser.find_element_by_xpath("//*[@id='password']").clear()#清空輸入框
browser.find_element_by_xpath("//*[@id='password']").send_keys("你的密碼")#輸入密碼
browser.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/div[1]/div/form/input[8]").click()#登陸
複製代碼
效果:自動打開瀏覽器,而後打開csdn登陸首頁,自動輸入用戶名和密碼實現登陸。
複製代碼
## 引入WebDriver的包
from selenium import webdriver
from bs4 import BeautifulSoup
## 建立瀏覽器對象
browser = webdriver.Firefox()
## 打開小米社區網站
browser.get('https://account.xiaomi.com/pass/serviceLogin?callback=http%3A%2F%2Fbbs.xiaomi.cn%2Flogin%2Fcallback%3Ffollowup%3Dhttp%253A%252F%252Fbbs.xiaomi.cn%252F%26sign%3DM2E4MTg3MzE3MGJmZGFiMTc0MTE5NmNjZTAyYWNmMDZhNTEwOTU2NQ%2C%2C&sid=new_bbs_xiaomi_cn&_locale=zh_CN')
browser.find_element_by_xpath("//*[@id='username']").clear()#清空輸入框
browser.find_element_by_xpath("//*[@id='username']").send_keys("你的帳號")#輸入帳號
browser.find_element_by_xpath("//*[@id='pwd']").clear()#清空輸入框
browser.find_element_by_xpath("//*[@id='pwd']").send_keys("你的密碼")#輸入密碼
browser.find_element_by_xpath("//*[@id='login-button']").click()#登陸
base_url="http://bbs.xiaomi.cn/d-{page}"
#我這裏是抓取了前5頁,固然你能夠抓取的更多
for i in range(1,6):
url=base_url.format(page=i)
browser.get(url)
bs4=BeautifulSoup(browser.page_source,'lxml')
titles=bs4.find_all('div', {'class':'title'})
for title in titles:
title_content=title.get_text().strip('\n')
print(title_content)
複製代碼
效果:
複製代碼
遇到的一些問題
這裏說一個最簡單的方法: 打開firefox瀏覽器,進入相應頁面,右鍵某個網頁元素點擊查看元素,而後複製xpath.以下圖所示: github
2. WebDriverException: 'geckodriver' executable needs to be in PATH.這個上面也提到過。web
geckodrive下載地址:github.com/mozilla/gec… (若是你沒法下載請評論一下,我這裏有一個安裝包) 將下載的geckodriver.exe 放到path路徑下 D:/Python/Python35-32/(就是放到你的python安裝路徑下,我這裏是假設你已經安裝好了python而且Python安裝路徑已經被添加到了path環境變量下)chrome