當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
爬虫之selenium和PhantomJS
生活随笔
收集整理的這篇文章主要介紹了
爬虫之selenium和PhantomJS
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
selenium
selenium是什么?
是Python的一個第三方庫,對外提供的接口可以操作瀏覽器,然后讓瀏覽器完成自動化的操作環(huán)境搭建
1.安裝: pip install selenium2.獲取對應(yīng)的驅(qū)動:以谷歌為例 2.1.查看谷歌瀏覽器幫助中的關(guān)于Google Chrome 查看版本2.2映射表地址: # 查看對應(yīng)的驅(qū)動http://blog.csdn.net/huilan_same/article/details/518966722.3谷歌瀏覽器驅(qū)動下載地址: # 根據(jù)映射表下載對應(yīng)驅(qū)動
http://chromedriver.storage.googleapis.com/index.html
使用簡介
導包
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait使用
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com') input_tag = driver.find_element_by_id('kw') # 找到id=kw 的input標簽 assert '百度一下' in driver.title # 頁面標題 print(driver.title) # 打印當前頁面的標題title input_tag.send_keys('python') # input框輸入值'python' input_tag.send_keys(Keys.ENTER) # 按回車 print(driver.current_url) # 當前頁面的url print(driver.page_source) # 當前頁面的response print(browser.get_cookies()) # 當前頁面的瀏覽器本地cookie # driver.close() # 關(guān)閉瀏覽器select下拉菜單選擇
# dirver = Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') # dirver.get('http://www.cma.gov.cn/') # print(dirver.page_source) # select_tag = Select(dirver.find_element(By.NAME, 'province')) # 獲取下拉菜單標簽 # select_tag.select_by_index(3) # 索引選擇 # select_tag.select_by_value('河北') # 按照下拉框的值選擇 # select_tag.select_by_visible_text('河北') # 按照下拉框可視化文本選擇 # select_tag.deselect_all() # 取消選中所有值行為鏈
# 行為鏈 driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com')input_tag = driver.find_element_by_id('kw') # 找到id=kw 的input標簽 submit_tag = driver.find_element_by_id('su') # 找到id=su 的submit提交標簽actions = ActionChains(driver) # 瀏覽器驅(qū)動傳進去實例化一個行為鏈對象 actions.move_to_element(input_tag) #移動到輸入框上 actions.send_keys_to_element(input_tag, 'python') # 給輸入框輸入python actions.move_to_element(submit_tag) # 移動到提交元素上 actions.click(submit_tag) # 點擊提交元素 actions.perform() # 執(zhí)行行為鏈cookie操作
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com') [print(cookie) for cookie in driver.get_cookies()] # 獲取所有瀏覽器上的cookie并展示 [driver.delete_cookie(cookie['domain']) for cookie in driver.get_cookies()] # 刪除所有的cookie driver.delete_all_cookies() # 刪除瀏覽器上當前頁面的所有cookie等待
1.?隱式等待
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com')# driver.implicitly_wait(10) # 在找元素的時候等待10秒 如果找不到再報錯input_tag = driver.find_element_by_id('123') input_tag.send_keys('python') # input框輸入值'python'2.?顯式等待
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com') try:WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'somename'))) # 等待10s 一直等待 id='somename'的標簽出現(xiàn)。 如果沒有再報錯。 finally:driver.quit()js代碼執(zhí)行和窗口切換
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') driver.get('http://www.baidu.com')driver.execute_script('window.open("http://www.cma.gov.cn/")') # 執(zhí)行js代碼 print(driver.current_url) # https://www.baidu.com/ driver.switch_to_window(driver.window_handles[1]) # 類似于列表操作 print(driver.current_url) # http://www.cma.gov.cn/ip代理
driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\chromedriver_win32\chromedriver.exe') options = webdriver.ChromeOptions() # 是指谷歌瀏覽器的選項信息 ip = 'http://125.123.136.226:9999' # 代理ip options.add_argument(f"--proxy-server={ip}") # 使用代理ip driver.get('http://httpbin.org/ip')注意:如果是Anaconda3的jupyter的情況,不能直接下載到本地的cpython解釋器? 要在Anaconda3\Scripts中指定下載
示例:先運行下看下結(jié)果
from time import sleep from selenium import webdriver# 后面是你的瀏覽器驅(qū)動位置,記得前面加r'','r'是防止字符轉(zhuǎn)義的 driver = webdriver.Chrome(r'F:\Python\10爬蟲\包\chromedriver_win32\chromedriver.exe')# 用get打開百度頁面 driver.get("http://www.baidu.com") # 查找頁面的“設(shè)置”選項,并進行點擊 driver.find_elements_by_link_text('設(shè)置')[0].click() sleep(2) # # 打開設(shè)置后找到“搜索設(shè)置”選項,設(shè)置為每頁顯示50條 driver.find_elements_by_link_text('搜索設(shè)置')[0].click() sleep(2)# 選中每頁顯示50條 m = driver.find_element_by_id('nr') sleep(2) m.find_element_by_xpath('//*[@id="nr"]/option[3]').click() m.find_element_by_xpath('.//option[3]').click() sleep(2)# 點擊保存設(shè)置 driver.find_elements_by_class_name("prefpanelgo")[0].click() sleep(2)# 處理彈出的警告頁面 確定accept() 和 取消dismiss() driver.switch_to_alert().accept() sleep(2) # 找到百度的輸入框,并輸入 美女 driver.find_element_by_id('kw').send_keys('美女') sleep(2) # 點擊搜索按鈕 driver.find_element_by_id('su').click() sleep(2) # 在打開的頁面中找到“Selenium - 開源中國社區(qū)”,并打開這個頁面 driver.find_elements_by_link_text('美女_百度圖片')[0].click() sleep(3)# 關(guān)閉瀏覽器 driver.quit()代碼介紹:
#導包 from selenium import webdriver #創(chuàng)建瀏覽器對象,通過該對象可以操作瀏覽器 browser = webdriver.Chrome('驅(qū)動路徑') #使用瀏覽器發(fā)起指定請求 browser.get(url)#使用下面的方法,查找指定的元素進行操作即可find_element_by_id 根據(jù)id找節(jié)點find_elements_by_name 根據(jù)name找find_elements_by_xpath 根據(jù)xpath查找find_elements_by_tag_name 根據(jù)標簽名找find_elements_by_class_name 根據(jù)class名字查找phantomJs
PhantomJS是一款無界面的瀏覽器,其自動化操作流程和上述操作谷歌瀏覽器是一致的。由于是無界面的,為了能夠展示自動化操作流程,PhantomJS為用戶提供了一個截屏的功能,使用save_screenshot函數(shù)實現(xiàn)。
示例:
from time import sleep from selenium import webdriver# 后面是你的瀏覽器驅(qū)動位置,記得前面加r'','r'是防止字符轉(zhuǎn)義的 driver = webdriver.Chrome(r'F:\Python\10爬蟲\包\chromedriver_win32\chromedriver.exe')# 用get打開百度頁面 driver.get("http://www.baidu.com") # 查找頁面的“設(shè)置”選項,并進行點擊 driver.find_elements_by_link_text('設(shè)置')[0].click() sleep(2) # # 打開設(shè)置后找到“搜索設(shè)置”選項,設(shè)置為每頁顯示50條 driver.find_elements_by_link_text('搜索設(shè)置')[0].click() sleep(2)# 選中每頁顯示50條 m = driver.find_element_by_id('nr') sleep(2) m.find_element_by_xpath('//*[@id="nr"]/option[3]').click() m.find_element_by_xpath('.//option[3]').click() sleep(2)# 點擊保存設(shè)置 driver.find_elements_by_class_name("prefpanelgo")[0].click() sleep(2)# 處理彈出的警告頁面 確定accept() 和 取消dismiss() driver.switch_to_alert().accept() sleep(2) # 找到百度的輸入框,并輸入 美女 driver.find_element_by_id('kw').send_keys('美女') sleep(2) # 點擊搜索按鈕 driver.find_element_by_id('su').click() sleep(2) # 在打開的頁面中找到“Selenium - 開源中國社區(qū)”,并打開這個頁面 driver.find_elements_by_link_text('美女_百度圖片')[0].click() sleep(3)# 關(guān)閉瀏覽器 driver.quit()谷歌無界面使用
# selenium 對 無頭谷歌 的調(diào)用######################################################### #固定格式 from selenium import webdriver import time from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') #########################################################path = r'F:\Python\視屏\10爬蟲\包\chromedriver_win32\chromedriver.exe' bro = webdriver.Chrome(executable_path=path,chrome_options=chrome_options) # 此時 屬于無界面的調(diào)用谷歌瀏覽器# 請求的發(fā)送 bro.get(url='https://www.baidu.com')#根據(jù)find系列的函數(shù)定位到指定的標簽 baidu_input = bro.find_element_by_id('kw')baidu_input.send_keys('python') # 百度搜索框輸入 python time.sleep(0.5)bro.find_element_by_id('su').click() # 找到百度一下 time.sleep(1) response = bro.find_element_by_xpath('//*[@id="1"]/h3/a[1]').click() time.sleep(6)bro.quit()?
重點:selenium+phantomjs 就是爬蟲終極解決方案:有些網(wǎng)站上的內(nèi)容信息是通過動態(tài)加載js形成的,所以使用普通爬蟲程序無法回去動態(tài)加載的js內(nèi)容。例如豆瓣電影中的電影信息是通過下拉操作動態(tài)加載更多的電影信息。
?#需求:爬取豆瓣電影動態(tài)加載出的電影詳情數(shù)據(jù)
from time import sleep from selenium import webdriver# 后面是你的瀏覽器驅(qū)動位置,記得前面加r'','r'是防止字符轉(zhuǎn)義的 driver = webdriver.Chrome(r'F:\Python\視屏\10爬蟲\包\chromedriver_win32\chromedriver.exe')url = 'https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=' # 豆瓣的urldriver.get(url=url) # 調(diào)用瀏覽器訪問豆瓣js = 'window.scrollTo(0,document.body.scrollHeight)' # 滾動下拉當前屏幕對應(yīng)像素的js代碼driver.execute_script(js) # 下拉滾動第一次 sleep(2)driver.execute_script(js) # 下拉滾動第二次 sleep(2)driver.execute_script(js) # 下拉滾動第三次 sleep(2)page_text = driver.page_source # 類似requests.get(url).text # print(page_text)with open('./douban.html','w',encoding='utf-8') as fp:fp.write(page_text)bro.quit()?qq空間登錄爬取
from time import sleep from selenium import webdriver from lxml import etree#登錄qq空間 bro = webdriver.Chrome(executable_path=r'F:\Python\視屏\10爬蟲\包\chromedriver_win32\chromedriver.exe') url = 'https://qzone.qq.com/' #請求的發(fā)送 bro.get(url=url) sleep(1) #定位到指定的iframe # 使用的組件嵌套 點位組件 bro.switch_to.frame('login_frame')bro.find_element_by_id('switcher_plogin').click() # 定位切換賬號密碼登錄 sleep(1)userName = bro.find_element_by_id('u') # 賬號輸入框 userName.send_keys('qq賬號')passWord = bro.find_element_by_id('p') # 密碼輸入欄 passWord.send_keys('qq密碼.') sleep(1) bro.find_element_by_id('login_button').click() # 點擊登錄 sleep(1) js = 'window.scrollTo(0,document.body.scrollHeight)' # 向下滾動的js代碼 bro.execute_script(js) # 1次 sleep(3) bro.execute_script(js) # 2次 sleep(3) bro.execute_script(js) # 3次 sleep(3) bro.execute_script(js) # 3次 sleep(3) bro.execute_script(js) # 3次 sleep(3) page_text = bro.page_source # 獲取頁面的response.text的內(nèi)容 print(page_text) sleep(5)#解析 tree = etree.HTML(page_text) # DOM數(shù)div_list = tree.xpath('//div[@class="f-info qz_info_cut"] | //div[@class="f-info"]') # 獲取 說說 或者其他轉(zhuǎn)發(fā)dom節(jié)點 for div in div_list:text = div.xpath('.//text()') # 得到每一個節(jié)點的文本內(nèi)容text = "".join(text) print(text)bro.quit()?
轉(zhuǎn)載于:https://www.cnblogs.com/clbao/p/10252528.html
總結(jié)
以上是生活随笔為你收集整理的爬虫之selenium和PhantomJS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java排序-交换排序-快速排序
- 下一篇: python描述器