#1 什麼是selenium
Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,Selenium 可以直接運作在浏覽器上,它支援所有主流的浏覽器(包括PhantomJS這些無界面的浏覽器),可以接收指令,讓浏覽器自動加載頁面,擷取需要的資料,甚至頁面截屏.
#2 PhantomJS的介紹
PhantomJS 是一個基于Webkit的“無界面”(headless)浏覽器,它會把網站加載到記憶體并執行頁面上的 JavaScript
下載下傳位址:http://phantomjs.org/download.html
#3 Chromedriver的介紹
Chromedriver 也是一個能夠被selenium驅動的浏覽器,但是和PhantomJS的差別在于它是有界面的
下載下傳位址:https://npm.taobao.org/mirrors/chromedriver
#4 driver的安裝
最簡單的安裝方式是:直接将上面下載下傳好的驅動,放到python的安裝路徑下.(如果會配置環境變量的小夥伴也可以自己調整)
#5 chromedriver安裝示例
----- Windows 下安裝方式
chromedriver_win32.zip : 版本 ChromeDriver v2.32 (2017-08-30)
(支援 Chrome v59-61)
1. 解壓 chromedriver_win32.zip
2. 将 chromedriver 移動到 Python安裝目錄下
(其實放哪都可以,但是需要配環境變量,放Python安裝目錄下省事)
注意:Chromedriver和電腦上的chrome版本有對應關系,建議使用最新的Chromedriver版本并且更新chrome浏覽器到最新版
映射表:
#selenium的基本使用
1 加載網頁:
selenium通過控制浏覽器,是以對應的擷取的資料都是elements中的内容
from selenium import webdriver
# 指定driver的絕對路徑
# driver = webdriver.PhantomJS()
driver = webdriver.Chrome()
# 向一個url發起請求
driver.get("https://www.baidu.com")
# 把網頁儲存為圖檔
driver.save_screenshot("baidu.png")
# 退出模拟浏覽器
driver.quit() # 一定要退出!不退出會有殘留程序!
2 定位和操作:
以百度搜尋為例
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()
time.sleep(6)
driver.quit()
3 檢視請求資訊:
driver.page_source # 檢視網頁源碼
driver.get_cookies() # # 擷取目前浏覽器的全部cookies
driver.current_url # 擷取目前頁面的url
4 退出
driver.close() #退出目前頁面
driver.quit() #退出浏覽器
小結
selenium的導包:from selenium import webdriver
selenium建立driver對象:webdriver.PhantomJS()
selenium請求資料:driver.get(“http://www.baidu.com/”)
selenium檢視資料: driver.page_source
關閉無界面浏覽器: driver.quit()
根據id定位元素: driver.find_element_by_id(“kw”)
操作點選事件: click()
給輸入框指派:send_keys()
案例:爬取某網站招聘資訊
from selenium import webdriver
import time
class Lagou(object):
def __init__(self, name, password):
opt = webdriver.ChromeOptions()
opt.add_argument('headless')
self.driver = webdriver.Chrome()# chrome_options=opt
self.emal = name
self.password = password
def Login(self):
self.driver.get('https://passport.lagou.com/login/login.html')
name = self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[1]/input')
name.send_keys(self.name)
pwd = self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[2]/input')
pwd.send_keys(self.password)
self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[5]/input').click()
time.sleep(2)
soso = self.driver.find_element_by_xpath('//*[@id="search_input"]')
soso.send_keys('爬蟲')
self.driver.find_element_by_xpath('//*[@id="search_button"]').click()
def get_url(self):
data_list = self.driver.find_elements_by_xpath('//*[@id="s_position_list"]/ul/li/div[1]/div[1]/div[1]/a')
url_list = list()
for data in data_list:
url = data.get_attribute('href')
url_list.append(url)
return url_list
def page_next(self):
js = 'scrollTo(0,4000)'
self.driver.execute_script(js)
self.driver.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[6]').click()
def parse_data(self, url):
f = self.driver.find_element_by_xpath
self.driver.get(url)
work_list = list()
temp = dict()
temp['company'] = f('/html/body/div[2]/div/div[1]/div/div[1]').text
temp['work'] = f('/html/body/div[2]/div/div[1]/div/span').text
temp['require'] = f('/html/body/div[2]/div/div[1]/dd/p[1]').text
temp['welfare'] = f('//*[@id="job_detail"]/dd[1]/p').text
temp['work_req'] = f('//*[@id="job_detail"]/dd[2]').text.replace('\n', '')
temp['add'] = f('//*[@id="job_detail"]/dd[3]/div[1]').text
work_list.append(temp)
print(work_list)
return work_list
def save_data(self):
pass
def run(self):
self.Login()
time.sleep(3)
count = 0
while True:
count += 1
time.sleep(3)
url_list = self.get_url()
time.sleep(3)
for url in url_list:
self.parse_data(url)
self.page_next()
if __name__ == '__main__':
lagou = Lagou('使用者名','密碼')
lagou.run()