<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用selenium實現動態渲染頁面的爬取,selenium是瀏覽器自動化測試框架,是一個用於Web應用程式測試的工具,可以直接執行在瀏覽器當中,並可以驅動瀏覽器執行指定的動作,如點選、下拉、填充資料、刪除cookie等操作,還可以獲取瀏覽器當前頁面的原始碼,就像使用者在瀏覽器中操作一樣。該工具所支援的瀏覽器有IE瀏覽器、Mozilla Firefox以及Google Chrome等。
首先開啟Anaconda Prompt(Anaconda)命令列視窗,然後輸入“pip install selenium“命令(如果沒有安裝Anaconda, 可以在cmd命令列視窗中執行安裝模組的命令),接著按下(回車)鍵,如下圖:
selenium有很多語言的版本,比如:Java、Ruby、Python等。
下載瀏覽器驅動
selenium模組安裝完成以後還需要選擇一個瀏覽器,然後下載對應的瀏覽器驅動,此時才可以通過selenium模組來控制瀏覽器的操作。這裡選擇Chrome瀏覽器Version 98.0.4758.80 (Official Build) (x86_64),然後在(http://chromedriver.storage.googleapis.com/index.html?path=98.0.4758.80/)谷歌瀏覽器驅動中下載瀏覽器驅動。如下圖:
說 明
在下載谷歌瀏覽器驅動時,根據自己的電腦系統下載對應的瀏覽器驅動。
谷歌瀏覽器驅動下載完成後, 將名稱為chromedriver.exe檔案拖放到/usr/bin 目錄下(python.exe檔案的同級路徑)。然後需要通過Python程式碼進行谷歌瀏覽器驅動的載入,這樣才可以啟動瀏覽器驅動並控制瀏覽器了。
針對不同瀏覽器有不同的driver。以下列出不同瀏覽器及其對應的driver,如下表:
Browers | Driver | Link |
---|---|---|
Chrome | Chromedriver(.exe) | http://chromedriver.storage.googleapis.com/index.html |
Internet Explorer | IEDriverServer.exe | http://selenium-release.storage.googleapis.com/index.html |
Edge | MicrosoftWebDriver.msi | http://go.microsoft.com/fwlink/?LinkId=619687 |
Firefox | geckodriver(.exe) | https://github.com/mozilla/geckodriver/releases/ |
PhantomJS | phantomjs(.exe) | http://phantomjs.org/ |
Opera | operadriver(.exe) | https://github.com/operasoftware/operachromiumdriver/releases |
Safari | SafariDriver.safariextz | http://selenium-release.storage.googleapis.com/index.html |
獲取京東商品資訊,範例程式碼如下:
#_*_coding:utf-8_*_ # 作者 :liuxiaowei # 建立時間 :2/7/22 6:43 PM # 檔案 :獲取京東商品資訊.py # IDE :PyCharm from selenium import webdriver # 匯入瀏覽器驅動模組 from selenium.webdriver.support.wait import WebDriverWait # 匯入等待類 from selenium.webdriver.support import expected_conditions as EC # 等待條件 from selenium.webdriver.common.by import By # 節點定位 #from selenium.webdriver.chrome.service import Service try: # 建立谷歌瀏覽器驅動引數物件 chrome_options = webdriver.ChromeOptions() # 不載入圖片 prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) # 使用headless無介面瀏覽器模式 chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') # 載入谷歌瀏覽器驅動 driver = webdriver.Chrome(options = chrome_options, executable_path='chromedriver') # 請求地址 driver.get('https://item.jd.com/12353915.html') wait = WebDriverWait(driver,10) # 等待10秒 # 等待頁面載入class名稱為m-item-inner的節點,該節點中包含商品資訊 wait.until(EC.presence_of_element_located((By.CLASS_NAME,"w"))) # 獲取name節點中所有div節點 name_div1 = driver.find_element(By.XPATH,'//div[@class="sku-name"]') name_div2 = driver.find_element(By.XPATH, '//div[@class="news"]/div[@class="item hide"]') name_div3 = driver.find_element(By.XPATH, '//div[@class="p-author"]') summary_price = driver.find_element(By.XPATH, '//div[@class="summary-price J-summary-price"]') print('提取的商品標題如下:') print(name_div1.text) # 列印商品標題 print('提取的商品宣傳語如下:') print(name_div2.text) # 列印宣傳語 print('提取的編著資訊如下:') print(name_div3.text) # 列印編著資訊 print('提取的價格資訊如下:') print(summary_price.text.strip('降價通知')) # 列印價格資訊 driver.quit() # 退出瀏覽器驅動 except Exception as e: print('顯示異常資訊!', e)
程式執行結果如下:
提取的商品標題如下:
零基礎學Python(Python3.9全綵版)(程式設計入門 專案實踐 同步視訊)
提取的商品宣傳語如下:
彩色程式碼更易學。Python程式設計從入門到實踐書籍,網路爬蟲、遊戲開發、資料分析等深度學習。贈全程視訊+原始碼+課後題+實物掛圖+學習應用地圖+電子書+圖書答疑
提取的編著資訊如下:
明日科技 著
提取的價格資訊如下:
京 東 價
¥ 72.00 [9.03折] [定價 ¥79.80]
selenium 模組支援多種獲取網頁節點的方法,其中比較常用的方法如下表:
selenium 模組獲取網頁節點的常用方法及描述
常用方法 | 描 述 |
---|---|
driver.find_element_by_id() | 根據id獲取節點,引數為字元型別id對應的值 |
driver.find_element_by_name() | 根據name獲取節點,引數為字元型別name對應的值 |
driver.find_element_by_xpath() | 根據XPATH獲取節點,引數為字元型別XPATH對應的值 |
driver.find_element_by_link_text() | 根據連結文字獲取節點,引數為字元型別連結文字 |
driver.find_element_by_tag_name() | 根據節點名稱獲取節點,引數為字元型別節點文字 |
driver.find_element_by_class_name() | 根據class獲取節點,引數為字元型別class對應的值 |
driver.find_element_by_css_selector() | 根據CSS選擇器獲取節點,引數為字元型別的CSS選擇器語法 |
說 明
上表所有獲取節點的方法均為獲取單個節點的方法,如需要獲取符合條件的多個節點時,可以在對應方法中element後面新增s即可。
除了以上常用的獲取節點的方法外,還可以使用driver.find_element()方法獲取單個節點,使用driver.find_elements()方法獲取多個節點。只是在呼叫這兩種方法時,需要為其指定by與value引數。其中by參數列示獲取節點的方式,而value為獲取方式對應的值(可以理解為條件)。範例程式碼如下:
# 獲取商品資訊節點中的所有div節點 name_div = driver.find_element(By.XPATH,'//div[@class="itemInfo-wrap"]').find_elements(By.TAG_NAME, 'div') # 提取並輸出單個div節點的內容 print('提取的商品標題如下:') print(name_div[0].text) # 列印商品標題 print('提取的商品宣傳語如下:') # 列印商品宣傳語 print(name_div[1].text)
程式執行結果如下:
提取的商品標題如下:
零基礎學Python(Python3.9全綵版)(程式設計入門 專案實踐 同步視訊)
提取的商品宣傳語如下:
彩色程式碼更易學。Python程式設計從入門到實踐書籍,網路爬蟲、遊戲開發、資料分析等深度學習。贈全程視訊+原始碼+課後題+實物掛圖+學習應用地圖+電子書+圖書答疑
明日科技 著
說 明
以上程式碼中首先使用find_element()方法獲取class值為“itemInfo-warp“的整個節點,然後在該節點中通過find_elements()方法獲取節點名稱div的所有節點,最後通過name_div[0].text,name_div[1].text獲取所有div中第一個第二個div內的文字資訊。
下面是By的其他屬性及用法
By屬性 | 用 法 |
---|---|
By.ID | 表示根據ID值獲取對應的單個或多個節點 |
By.LINK_TEXT | 表示根據連結文字獲取對應的單個或多個節點 |
By.PARTIAL_LINK_TEXT | 表示根據部分連結文字獲取對應的單個或多個節點 |
By.NAME | 根據name值獲取對應的單個或多個節點 |
By.TAG_NAME | 根據節點名稱獲取單個或多個節點 |
By.CLASS_NAME | 根據class值獲取單個或多個節點 |
By.CSS_SELECTOR | 根據CSS選擇器獲取單個或多個節點,對應的value為字串CSS的位置 |
By.XPATH | 根據By.XPATH獲取單個或多個節點,對應的value字串節點位置 |
在使用selenium模組獲取某個節點中的某個屬性所對應的值時,可以使用get_attribute()方法來實現,範例程式碼如下:
# 根據XPath定位獲取指定節點中的href地址 href = driver.find_element(By.XPATH, '//div[@id="p-author"]/a').get_attribute('href') print('指定節點中的地址資訊如下:')
程式執行結果如下:
指定節點中的地址資訊如下:
https://book.jd.com/writer/%E6%98%8E%E6%97%A5%E7%A7%91%E6%8A%80_1.html
本案例中需要注意的是載入瀏覽器驅動,一定要指定chromedriver的路徑。語法如下:
# 載入谷歌瀏覽器驅動 driver = webdriver.Chrome(options = chrome_options, executable_path='chromedriver') # 本例驅動與爬蟲程式在同一路 徑
關閉瀏覽器頁面
driver.close():關閉當前頁面 driver.quit():退出整個瀏覽器
到此這篇關於使用selenium+chromedriver+xpath爬取動態載入資訊的文章就介紹到這了,更多相關selenium chromedriver xpath爬取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45