91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python+selenium進行爬蟲操作

發布時間:2021-07-02 16:44:57 來源:億速云 閱讀:290 作者:chen 欄目:大數據

這篇文章主要講解了“怎么用python+selenium進行爬蟲操作”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用python+selenium進行爬蟲操作”吧!

1.聲明瀏覽器對象

selenium支持多個瀏覽器,也支持手機端的瀏覽器,除此之外還有Phantomjs,下面舉一個簡單的例子,創建一個谷歌瀏覽器對象,依次類推可以得到其他瀏覽器對象

from selenium import webdriver

chrome_driver = "C:\Users\zhongchengbin\Documents\chromedriver\chromedriver.exe"(注意要下載對應的chrome的版本,設置路徑)browser = webdriver.Chrome(executable_path=chrome_driver)


2.請求頁面

# 使用get方法請求百度網頁
browser.get('https://www.baidu.com')
# page_source屬性用于獲取網頁的源代碼,然后就可以使用正則表達式,css,xpath,bs4來解析網頁
print(browser.page_source)
browser.close()
3.查找單個節點和多個節點

尋找單個節點的多有方法,返回的結果是WebElement類型的
browser.find_element_by_id()
browser.find_element_by_name()
browser.find_element_by_xpath()
browser.find_element_by_tag_name()
browser.find_element_by_link_text()
browser.find_element_by_class_name()
browser.find_element_by_css_selector()
browser.find_element_by_partial_link_text()
如果是找多個節點,在element后面加s,結果是列表類型


當我們要定位到百度的搜索框時,我們可以看到,檢查元素中,input這個節點里有class,id 等等屬性,我們通過定位相關屬性,就能定位到想要的節點

from selenium import webdriver
chrome_driver = "C:\Users\zhongchengbin\Documents\chromedriver\chromedriver.exe"(注意要下載對應的chrome的版本,設置路徑)

browser = webdriver.Chrome(executable_path=chrome_driver)
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
browser.close()
4模擬瀏覽器進行操作

在打開瀏覽器之后,我們往往需要在一些搜索框里輸入文字,刪除文字,點擊一些按鈕等等,這時我們需要用到一下幾種方法

send_keys():輸入文字
clear():清除文字
click():點擊按鈕
舉個例子,我們打開百度瀏覽器,然后輸入一些關鍵字,刪除,再次輸入一些關鍵字,然后點擊回車然后搜索

import time
from selenium import webdriver
chrome_driver = "C:\Users\zhongchengbin\Documents\chromedriver\chromedriver.exe"(注意要下載對應的chrome的版本,設置路徑)

browser = webdriver.Chrome(executable_path=chrome_driver)
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('許嵩')
time.sleep(3)
input.clear()
input.send_keys('python')
input.send_keys(Keys.ENTER)
# button = browser.find_element_by_class_name('btn self_btn')
# button.click()
browser.close()
5.模擬鼠標移動,鍵盤按鍵等沒有特定的執行對象的操作

模擬瀏覽器的時候,我們可能會使用到一些拖動的操作,比如需要將某一個點拖到另外一個地方去,這種方法我們可以稱之為動作鏈。

首先打開網頁http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable中的一個實例,選中要拖動的節點以及拖動到哪里的節點,使用ActionChains對象使它變成一個變量,再調用drag_and_drop方法以及perform方法來執行該過程。

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get('http:www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
browser.switch_to.frame('iframeResult')
yuanlai = browser.find_element_by_css_selector('#draggable')
mubiao = browser.find_element_by_css_selector('#droppable')
a = ActionChains(browser)
a.drag_and_drop(yuanlai,mubiao)
a.perform()
6.拖動滑動條

使用爬蟲爬取網頁時,經常會看到使用滑動條的頁面,然后會顯示加載中,沒多久就會加載出新的頁面出來。如果直接爬取,往往只能爬到一頁甚至是前幾頁的信息。

在此可以直接模擬運行JavaScript,滑到網頁的最底下。使用的是execute_script(),并且可以設置一個網頁提示框

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.toutiao.com/search/?keyword=街拍')
# execute_script()將進度條拉到最下面,然后彈出提示框
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("已經到最下面了")')
7.獲取節點信息

獲取節點信息與兩種方法,第一種是使用page_source屬性,獲取到目標網頁的源代碼之后,使用正則表達式,css,xpath ,bs4等工具進行抓取信息。第二種就是直接使用selenium的一些方法和屬性。

① 獲取屬性

首先選中要匹配解析的節點,然后調用get_attribute方法來獲取節點的屬性。

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
print(input)
print(input.get_attribute('class'))
② 獲取文本

依然是先代開網址,然后定位到目標節點,再使用text屬性來獲取文本

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
print(input)
print(input.text)
③ 獲取ID,位置,標簽名和大小

方法和前兩個類似,直接調用即可獲得相關的值

from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
print(input)
# 獲取節點id
print(input.id)
# 獲取節點在頁面的相對位置
print(input.location)
# 獲取節點標簽名稱
print(input.tag_name)
# 獲取節點大小
print(input.size)
8.切換frame

網頁有一種很常見的節點叫做iframe,相當于是子frame,也就是頁面的子頁面。

結構和外部網頁的結構一致,當我們使用selenium打開頁面,默認是在父頁面里執行的,但是呢,這種網頁我們往往是獲取不到子頁面的節點,所以要使用switch_to.frame()來跳轉頁面,然后再進行相對應的操作

然后嘗試獲取父頁面的某個節點,如果獲取不到就報錯,接下來就換回父頁面去獲取該節點,就能成功了。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
 
browser = webdriver.Chrome
browser.get('https://www.toutiao.com')
browser.switch_to.frame('tanxssp-tuwen-iframemm')#具體是什么,要看節點frame的id是什么
try:
    title = browser.find_element_by_id('tanx-a-mm_32479643_3494618_81668314')
except NoSuchElementException:
    print('沒有這個節點')
browser.switch_to.parent_frame()
title = browser.find_element_by_id('tanx-a-mm_32479643_3494618_81668314')
print(title)
print(title.text)
9.延時等待

有些時候,網頁有額外的Ajax請求,并沒有那么快就能加載出來,所以我們要有耐心地等待一下。

等待分為兩種,隱式等待和顯式等待

隱式等待,查找某個節點的時候,隱式等待就會等待固定的時間,如果到了時間你還沒有來,他就會發脾氣,然后向上級打小報告說你沒有出現。

from selenium import webdriver
browser = webdriver.Chrome
browser.implicitly_wait(10)
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
print(input)
顯式等待就顯得比較有人情味一點,會做人。當她準備等你的時候,她會溫馨地提示你,她最多等你多久,如果你在規定的時間內到了,那好,就一起接著做其他事。如果你超過了時間沒來,那也沒辦法了,只能向上級報告這個問題了。

# 顯式等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
browser = webdriver.Chrome
browser = get('https://www.taobao.com')
# 引入WWebDriverWait對象,指定等待的最長時間
wait = WebDriverWait(browser,10)
# 調用unti方法,然后設定等待的條件,表示直到這個節點出現的意思。參數是節點的定位元組,也就是說ID為q的節點搜索框
# 成功就返回,不成功就拋出異常
input = wait.until(EC,presence_of_element_located((By.ID,'q')))
button = wait.until(EC,element_to_be_clickable((By.CSS_SELECTOR,'btn-search')))
print(input,button)
'''
所有的等待條件
title_is                                 標題是某內容
title_contains                           標題包含某內容
presence_of_element_located              節點加載出來,傳入定位元組
visibility_of_element_located            節點可見,傳入定位元組
visibility_of                            可見,傳入節點對象
presence_of_all_element_located          所有節點加載出來
text_to_be_present_in_element            某個節點文本包含某文字
text_to_be_present_in_element_value      某個節點值包含某文字
frame_to_be_available_and_switch_to_it   加載并且切換
invisibility_of_element_located          節點不可見
element_to_be_clickable                  節點可點擊
staleness_of                             判斷一個節點是否在DOM,可判斷頁面是否已經刷新
element_to_be_selected                   節點可選擇,傳節點對象
element_located_to_be_selected           節點可選擇,傳定位元組
element_selection_state_to_be            傳入節點對象以及狀態,相等返回true,否則返回false
element_located_selection_state_to_be    傳入定位元組以及狀態,相等返回true,否則返回false
alert_is_present                         是否出現警告  
'''
10.后退前進

使用瀏覽器都有前進后退的功能,在selenium中,back()表示后退,forward()表示前進

# 后退前進
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser .get('https://www.baidu.com')
browser.back()
time.sleep(3)
browser.forward()
browser.close()
11.獲取cookies

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
print(browser.get_cookies())
browser.add_cookie({'name':'name','domain':'www.baidu.com','value':'germey'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
12.選項卡管理

import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# window.open()新開啟一個選項卡
browser.execute_script('window.open()')
# window_handles 用于獲取當前開啟的所有選項卡,返回的是選項卡的代號列表
print(browser.window_handles)
# switch_to_window用于切換選項卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(3)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

感謝各位的閱讀,以上就是“怎么用python+selenium進行爬蟲操作”的內容了,經過本文的學習后,相信大家對怎么用python+selenium進行爬蟲操作這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西县| 新和县| 丹江口市| 自治县| 凤城市| 六枝特区| 炉霍县| 金塔县| 康马县| 中山市| 闻喜县| 巴青县| 东海县| 清涧县| 乌兰浩特市| 即墨市| 改则县| 保德县| 海盐县| 保靖县| 惠来县| 博乐市| 商都县| 西城区| 凤城市| 抚松县| 秦皇岛市| 溧水县| 崇明县| 宣武区| 临洮县| 景洪市| 当阳市| 五寨县| 丁青县| 峨眉山市| 鄄城县| 准格尔旗| 陕西省| 本溪市| 石棉县|