Selenium是一個用于Web應用程式測試的工具。Selenium測試直接運作在浏覽器中,就像真正的使用者在操作一樣。接下來我們将學習如何使用selenium。
selenium提取資料 1.driver對象的常用屬性和方法 1.driver.page_source() 目前标簽頁浏覽器渲染之後的網頁源代碼 2.driver.current_url() 目前标簽頁的url 3.driver.close() 關閉目前标簽頁 4.driver.quit() 關閉浏覽器 5.driver.forward() 頁面前進 6.driver.back() 頁面後退 7.driver.screen_shot(img_name) 頁面截圖 2.元素定位方法 1.driver.find_element_by_xpath() 2.driver.find_element_by_css_selector() 3.driver.find_element_by_name() 4.driver.find_element_by_class_name() 5.driver.find_element_by_id() 6.driver.find_element_by_link_text() 7.driver.find_element_by_partial_link_text() 8.driver.find_element_by_tag_name() element -> elements 定位符合條件的元素,并傳回清單 3.标簽對象屬性值和文本值擷取 文本值:.text 屬性值:.get_attribute('href') 4.元素操作函數 點選: click() 發送值:send_keys() 清除: clear() 5.其他使用方法 1.标簽頁的切換 擷取所有标簽頁句柄 current_windows = driver.window_handles 切換标簽 driver.switch_to.window(current_windows[0]) 2.iframe的切換 1.driver.switch_to.frame('id') 2.el_frame = driver.find_element_by_xpath('') driver.switch_to.frame(el_frame) 3.擷取cookies值 driver.get_cookies() 4.執行js代碼 滾動條的拖動 js = 'scrollTo(0, 500)' #0:x方向 driver.execute_script(js) 5.頁面等待 強制等待:sleep() 隐式等待 :設定一個最大時間,逾時報錯 driver.implicitly_wait(10) (s) 顯示等待 6.無界面模式 options = webdriver.ChromeOptions() options.add_argument("--headless") options.add_argument("--disable-gpu") driver = webdriver.Chrome(chrome_options = options) 7.代理ip options.add_argument("--proxy-server = http://202.20.16.82.9527") 8.更換user-agent options.add_argument("--user-agent=***")s
上面簡單介紹了關于selenium的一些基本文法,下面我們将通過使用selenium子產品爬取鬥魚網站作為實踐:
import time
from selenium import webdriver
class Douyu(object):
def __init__(self):
self.url = 'https://www.douyu.com/directory/all'
self.driver = webdriver.Chrome()
def parse_data(self):
room_list = self.driver.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/ul/li/div')
data_list = []
for room in room_list:
temp = {}
temp['title'] = room.find_element_by_xpath('./a/div[2]/div[1]/h3').text
temp['type'] = room.find_element_by_xpath('./a/div[2]/div[1]/span').text
data_list.append(temp)
return data_list
def save_data(self, data_list):
for data in data_list:
print(data)
def run(self):
# url
# driver
# get
self.driver.get(self.url)
# 循環爬取
for i in range(2):
time.sleep(3)
# parse
data_list = self.parse_data()
# save
self.save_data(data_list)
# next
self.driver.execute_script('scrollTo(0, 100000)')
self.driver.find_elements_by_xpath('//*[@id="listAll"]/section[2]/div[2]/div/ul/li[9]/span')[0].click()
print(i)
self.driver.close()
if __name__ == '__main__':
douyu = Douyu()
douyu.run()