Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
我們爬取網頁過程中,經常發現我們想要獲得的數據并不能簡單的通過解析HTML代碼獲取
1. 使用示例
2. 詳細介紹
2.1 聲明瀏覽器對象
2.2 訪問頁面
2.3 查找元素
2.3.1 單個元素
下面是詳細的元素查找方法
第二種:
2.3.2 多個元素
2.4 元素交互操作
比如說在搜索框內輸入文字:
2.5 交互動作
2.6 執行JavaScript
比如拖拽下拉
2.7 獲取元素信息
2.7.1 獲取屬性
2.8 Frame
2.9 等待
2.9.1 隱式等待
需要特別說明的是:
2.9.2 顯式等待
2.10 瀏覽器的前進/后退
2.11 對Cookies進行操作
2.12 選項卡管理
就可以使用selenium來實現。
文深入探討如何運用PHP高效獲取網頁HTML元素信息。
運用文件讀取函數,獲取網頁數據。
利用PHP腳本的強大功能,網頁數據的采集中極為便捷,各類網頁元素亦可轉化為字符形式線上展現。
2.使用正則表達式匹配目標元素
面對諸多網頁需求,巧妙運用正則表達式可以精準且迅速搜尋并提取所需的HTML元素。核心技術在于結合正則表達式與網頁數據,以實現精確篩選及獲取這些元素的目的。
3.使用DOMDocument類解析網頁
借助 DOMDocument 類,PHP 為我們提供了深入分析和處理網頁的途徑。該類功能強大且易用,尤其以其精準讀取 HTML 文檔樹及其靈活操作的表現,在準確獲取所需元素方面具有顯著優勢。
4.使用Simple HTML DOM庫
對于正則表達式和DOMDocument類的初學者而言,可能會遭遇困難。為提升工作效率,可嘗試借助于諸如Simple HTML DOM這類第三方工具。該工具能準確挖掘所需HTML元素,大幅縮減項目開發時間。
5.使用XPath查詢語言
憑借其卓越性能,XPath在應對XML及HTML文檔元素抽取任務中表現非凡,為我們提供了對HTML元素的精準與靈動操縱。
6.使用cURL庫發送HTTP請求
借助PHP中cURL庫的功能優勢,我們能夠精確滿足各種網絡頁面內容獲取和模擬仿真的需求,從而突出頁面關鍵信息的精度提取。
7.處理JavaScript生成的內容
針對個性化需求,運用JavaScript也可實現網站內容的動態生產。為高效達成此目的,我們能依賴于PHP所提供的兩種無頭瀏覽器工具包——Selenium以及PhantomJS。
8.處理AJAX請求返回的數據
為了實現在網頁間的數據交互和溝通,尤其是借助AJAX技術模擬網絡傳輸和數據獲取過程的各項操作,我們會充分利用PHP中獨有的CURL模塊和眾多第三方廠商開發的高效能庫,它們將會成為你處理海量信息的強大后盾。
9.使用API接口獲取數據
若目標網站具備API訪問許可,那么僅需根據接口文檔所指定的請求參數,便可自動獲取并拆分JSON或者XML格式的回饋數據,進而達到信息交換的目標。
10.注意事項和其他方法
在獲取網頁中的HTML元素時,需要注意以下幾點:
-確保目標網頁存在且可訪問;
-遵守目標網站的使用規則和法律法規;
-防止對目標網站造成過大的訪問壓力;
-根據具體需求選擇合適的方法和工具。
運用此策略,能精準提取所需HTML組件,為構建多樣化應用及特性提供強大后盾。盼望本文能對您在PHP開發過程中網頁元素搜尋有所裨益。
析動態內容
根據權威機構發布的全球互聯網可訪問性審計報告,全球約有四分之三的網站其內容或部分內容是通過JavaScript動態生成的,這就意味著在瀏覽器窗口中“查看網頁源代碼”時無法在HTML代碼中找到這些內容,也就是說我們之前用的抓取數據的方式無法正常運轉了。解決這樣的問題基本上有兩種方案,一是JavaScript逆向工程;另一種是渲染JavaScript獲得渲染后的內容。
JavaScript逆向工程
下面我們以“360圖片”網站為例,說明什么是JavaScript逆向工程。其實所謂的JavaScript逆向工程就是找到通過Ajax技術動態獲取數據的接口。
但是當我們在瀏覽器中通過右鍵菜單“顯示網頁源代碼”的時候,居然驚奇的發現頁面的HTML代碼中連一個<img>標簽都沒有,那么我們看到的圖片是怎么顯示出來的呢?原來所有的圖片都是通過JavaScript動態加載的,而在瀏覽器的“開發人員工具”的“網絡”中可以找到獲取這些圖片數據的網絡API接口,
那么結論就很簡單了,只要我們找到了這些網絡API接口,那么就能通過這些接口獲取到數據,當然實際開發的時候可能還要對這些接口的參數以及接口返回的數據進行分析,了解每個參數的意義以及返回的JSON數據的格式,這樣才能在我們的爬蟲中使用這些數據。
關于如何從網絡API中獲取JSON格式的數據并提取出我們需要的內容,在之前的《文件和異常》一文中已經講解過了,這里不再進行贅述。
使用Selenium
盡管很多網站對自己的網絡API接口進行了保護,增加了獲取數據的難度,但是只要經過足夠的努力,絕大多數還是可以被逆向工程的,但是在實際開發中,我們可以通過瀏覽器渲染引擎來避免這些繁瑣的工作,WebKit就是一個利用的渲染引擎。
WebKit的代碼始于1998年的KHTML項目,當時它是Konqueror瀏覽器的渲染引擎。2001年,蘋果公司從這個項目的代碼中衍生出了WebKit并應用于Safari瀏覽器,早期的Chrome瀏覽器也使用了該內核。在Python中,我們可以通過Qt框架獲得WebKit引擎并使用它來渲染頁面獲得動態內容,關于這個內容請大家自行閱讀《爬蟲技術:動態頁面抓取超級指南》一文。
如果沒有打算用上面所說的方式來渲染頁面并獲得動態內容,其實還有一種替代方案就是使用自動化測試工具Selenium,它提供了瀏覽器自動化的API接口,這樣就可以通過操控瀏覽器來獲取動態內容。首先可以使用pip來安裝Selenium。
pip3 install selenium
下面以“阿里V任務”的“直播服務”為例,來演示如何使用Selenium獲取到動態內容并抓取主播圖片。
import requests from bs4 import BeautifulSoup def main(): resp = requests.get('https://v.taobao.com/v/content/live?catetype=704&from=taonvlang') soup = BeautifulSoup(resp.text, 'lxml') for img_tag in soup.select('img[src]'): print(img_tag.attrs['src']) if __name__ == '__main__': main()
運行上面的程序會發現沒有任何的輸出,因為頁面的HTML代碼上根本找不到<img>標簽。接下來我們使用Selenium來獲取到頁面上的動態內容,再提取主播圖片。
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.keys import Keys def main(): driver = webdriver.Chrome() driver.get('https://v.taobao.com/v/content/live?catetype=704&from=taonvlang') soup = BeautifulSoup(driver.page_source, 'lxml') for img_tag in soup.body.select('img[src]'): print(img_tag.attrs['src']) if __name__ == '__main__': main()
在上面的程序中,我們通過Selenium實現對Chrome瀏覽器的操控,如果要操控其他的瀏覽器,可以創對應的瀏覽器對象,例如Firefox、IE等。運行上面的程序,如果看到如下所示的錯誤提示,那是說明我們還沒有將Chrome瀏覽器的驅動添加到PATH環境變量中,也沒有在程序中指定Chrome瀏覽器驅動所在的位置。
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
為了解決上面的問題,可以到Selenium的官方網站找到瀏覽器驅動的下載鏈接并下載需要的驅動,在Linux或macOS系統下可以通過下面的命令來設置PATH環境變量,Windows下配置環境變量也非常簡單,不清楚的可以自行了解。
export PATH=$PATH:/Users/Hao/Downloads/Tools/chromedriver/
其中/Users/Hao/Downloads/Tools/chromedriver/就是chromedriver所在的路徑。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。