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
文深入探討如何運用PHP高效獲取網(wǎng)頁HTML元素信息。
運用文件讀取函數(shù),獲取網(wǎng)頁數(shù)據(jù)。
利用PHP腳本的強大功能,網(wǎng)頁數(shù)據(jù)的采集中極為便捷,各類網(wǎng)頁元素亦可轉(zhuǎn)化為字符形式線上展現(xiàn)。
2.使用正則表達(dá)式匹配目標(biāo)元素
面對諸多網(wǎng)頁需求,巧妙運用正則表達(dá)式可以精準(zhǔn)且迅速搜尋并提取所需的HTML元素。核心技術(shù)在于結(jié)合正則表達(dá)式與網(wǎng)頁數(shù)據(jù),以實現(xiàn)精確篩選及獲取這些元素的目的。
3.使用DOMDocument類解析網(wǎng)頁
借助 DOMDocument 類,PHP 為我們提供了深入分析和處理網(wǎng)頁的途徑。該類功能強大且易用,尤其以其精準(zhǔn)讀取 HTML 文檔樹及其靈活操作的表現(xiàn),在準(zhǔn)確獲取所需元素方面具有顯著優(yōu)勢。
4.使用Simple HTML DOM庫
對于正則表達(dá)式和DOMDocument類的初學(xué)者而言,可能會遭遇困難。為提升工作效率,可嘗試借助于諸如Simple HTML DOM這類第三方工具。該工具能準(zhǔn)確挖掘所需HTML元素,大幅縮減項目開發(fā)時間。
5.使用XPath查詢語言
憑借其卓越性能,XPath在應(yīng)對XML及HTML文檔元素抽取任務(wù)中表現(xiàn)非凡,為我們提供了對HTML元素的精準(zhǔn)與靈動操縱。
6.使用cURL庫發(fā)送HTTP請求
借助PHP中cURL庫的功能優(yōu)勢,我們能夠精確滿足各種網(wǎng)絡(luò)頁面內(nèi)容獲取和模擬仿真的需求,從而突出頁面關(guān)鍵信息的精度提取。
7.處理JavaScript生成的內(nèi)容
針對個性化需求,運用JavaScript也可實現(xiàn)網(wǎng)站內(nèi)容的動態(tài)生產(chǎn)。為高效達(dá)成此目的,我們能依賴于PHP所提供的兩種無頭瀏覽器工具包——Selenium以及PhantomJS。
8.處理AJAX請求返回的數(shù)據(jù)
為了實現(xiàn)在網(wǎng)頁間的數(shù)據(jù)交互和溝通,尤其是借助AJAX技術(shù)模擬網(wǎng)絡(luò)傳輸和數(shù)據(jù)獲取過程的各項操作,我們會充分利用PHP中獨有的CURL模塊和眾多第三方廠商開發(fā)的高效能庫,它們將會成為你處理海量信息的強大后盾。
9.使用API接口獲取數(shù)據(jù)
若目標(biāo)網(wǎng)站具備API訪問許可,那么僅需根據(jù)接口文檔所指定的請求參數(shù),便可自動獲取并拆分JSON或者XML格式的回饋數(shù)據(jù),進(jìn)而達(dá)到信息交換的目標(biāo)。
10.注意事項和其他方法
在獲取網(wǎng)頁中的HTML元素時,需要注意以下幾點:
-確保目標(biāo)網(wǎng)頁存在且可訪問;
-遵守目標(biāo)網(wǎng)站的使用規(guī)則和法律法規(guī);
-防止對目標(biāo)網(wǎng)站造成過大的訪問壓力;
-根據(jù)具體需求選擇合適的方法和工具。
運用此策略,能精準(zhǔn)提取所需HTML組件,為構(gòu)建多樣化應(yīng)用及特性提供強大后盾。盼望本文能對您在PHP開發(fā)過程中網(wǎng)頁元素搜尋有所裨益。
C#中,你可以使用System.Net.Http.HttpClient來從網(wǎng)頁獲取HTML內(nèi)容,然后使用System.Text.RegularExpressions.Regex來解析和提取HTML中的<title>標(biāo)簽內(nèi)容。以下是一個簡單的示例,演示了如何執(zhí)行此操作:
csharpusing System;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
class Program
{
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
try
{
// 要抓取內(nèi)容的網(wǎng)頁URL
string url = "http://example.com";
// 發(fā)送HTTP GET請求獲取網(wǎng)頁內(nèi)容
string htmlContent = await client.GetStringAsync(url);
// 正則表達(dá)式,用于匹配<title>標(biāo)簽內(nèi)的內(nèi)容
string titlePattern = @"<title>(.+?)</title>";
// 使用Regex.Match方法查找匹配項
Match match = Regex.Match(htmlContent, titlePattern);
// 如果找到了匹配項
if (match.Success)
{
// 提取<title>標(biāo)簽內(nèi)的內(nèi)容
string title = match.Groups[1].Value;
// 輸出提取到的title
Console.WriteLine("網(wǎng)頁標(biāo)題: " + title);
}
else
{
Console.WriteLine("未找到<title>標(biāo)簽。");
}
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
}
}
在這個示例中,我們首先創(chuàng)建了一個HttpClient實例,然后使用GetStringAsync方法異步獲取網(wǎng)頁的HTML內(nèi)容。接下來,我們定義了一個正則表達(dá)式titlePattern,用于匹配<title>標(biāo)簽中的文本。Regex.Match方法用于在HTML內(nèi)容中查找匹配項。如果找到匹配項,我們就從匹配結(jié)果中提取出標(biāo)題文本并打印出來。
請注意,使用正則表達(dá)式解析HTML可能不是最可靠的方法,因為HTML的結(jié)構(gòu)可能會非常復(fù)雜,并且正則表達(dá)式可能無法正確處理所有情況。在實際應(yīng)用中,建議使用HTML解析庫(如AngleSharp或HtmlAgilityPack)來解析HTML文檔,這樣可以更健壯和準(zhǔn)確地提取所需的信息。
下面是一個使用HtmlAgilityPack庫提取網(wǎng)頁標(biāo)題的示例:
csharpusing System;
using System.Net.Http;
using HtmlAgilityPack;
using System.Threading.Tasks;
class Program
{
static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
try
{
// 要抓取內(nèi)容的網(wǎng)頁URL
string url = "http://example.com";
// 發(fā)送HTTP GET請求獲取網(wǎng)頁內(nèi)容
string htmlContent = await client.GetStringAsync(url);
// 加載HTML內(nèi)容到HtmlDocument對象
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
// 使用XPath查詢找到<title>元素并獲取其InnerText
var titleNode = doc.DocumentNode.SelectSingleNode("//title");
if (titleNode != null)
{
string title = titleNode.InnerText;
Console.WriteLine("網(wǎng)頁標(biāo)題: " + title);
}
else
{
Console.WriteLine("未找到<title>標(biāo)簽。");
}
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
}
}
在這個示例中,我們使用了HtmlAgilityPack庫來加載HTML內(nèi)容,并使用XPath查詢來定位<title>標(biāo)簽。這種方法通常比使用正則表達(dá)式更加穩(wěn)定和可靠。在使用HtmlAgilityPack之前,你需要通過NuGet安裝它:
bashInstall-Package HtmlAgilityPack
或者,如果你使用.NET Core CLI,可以運行:
本Pandas教程中,我們將詳細(xì)介紹如何使用Pandas read_html方法從HTML中獲取數(shù)據(jù)。首先,在最簡單的示例中,我們將使用Pandas從一個字符串讀取HTML。其次,我們將通過幾個示例來使用Pandas read_html從Wikipedia表格中獲取數(shù)據(jù)。在之前的一篇文章(關(guān)于Python中的探索性數(shù)據(jù)分析)中,我們也使用了Pandas從HTML表格中讀取數(shù)據(jù)。
在開始學(xué)習(xí)Python和Pandas時,為了進(jìn)行數(shù)據(jù)分析和可視化,我們通常從實踐導(dǎo)入數(shù)據(jù)開始。在之前的文章中,我們已經(jīng)了解到我們可以直接在Python中輸入值(例如,從Python字典創(chuàng)建Pandas dataframe)。然而,通過從可用的源導(dǎo)入數(shù)據(jù)來獲取數(shù)據(jù)當(dāng)然更為常見。這通常是通過從CSV文件或Excel文件中讀取數(shù)據(jù)來完成的。例如,要從一個.csv文件導(dǎo)入數(shù)據(jù),我們可以使用Pandas read_csv方法。這里有一個如何使用該方法的快速的例子,但一定要查看有關(guān)該主題的博客文章以獲得更多信息。
現(xiàn)在,上面的方法只有在我們已經(jīng)有了合適格式的數(shù)據(jù)(如csv或JSON)時才有用(請參閱關(guān)于如何使用Python和Pandas解析JSON文件的文章)。
我們大多數(shù)人會使用Wikipedia來了解我們感興趣的主題信息。此外,這些Wikipedia文章通常包含HTML表格。
要使用pandas在Python中獲得這些表格,我們可以將其剪切并粘貼到一個電子表單中,然后,例如使用read_excel將它們讀入Python。現(xiàn)在,這個任務(wù)當(dāng)然可以用更少的步驟來完成:我們可以通過web抓取來對它進(jìn)行自動化。一定要查看一下什么是web抓取。
當(dāng)然,這個Pandas讀取HTML教程將要求我們安裝Pandas及其依賴項。例如,我們可以使用pip來安裝Python包,比如Pandas,或者安裝一個Python發(fā)行版(例如,Anaconda、ActivePython)。下面是如何使用pip安裝Pandas: pip install pandas。
注意,如果出現(xiàn)消息說有一個更新版本的pip可用,請查看這篇有關(guān)如何升級pip的文章。注意,我們還需要安裝lxml或BeautifulSoup4,當(dāng)然,這些包也可以使用pip來安裝: pip install lxml。
下面是如何使用Pandas read_html從HTML表格中抓取數(shù)據(jù)的最簡單的語法:
現(xiàn)在我們已經(jīng)知道了使用Pandas讀取HTML表格的簡單語法,接下來我們可以查看一些read_html示例。
第一個示例是關(guān)于如何使用Pandas read_html方法的,我們將從一個字符串讀取HTML表格。
現(xiàn)在,我們得到的結(jié)果不是一個Pandas DataFrame,而是一個Python列表。也就是說,如果我們使用type函數(shù),我們可以看到:
如果我們想得到該表格,我們可以使用列表的第一個索引(0)
在第二個Pandas read_html示例中,我們將從Wikipedia抓取數(shù)據(jù)。實際上,我們將得到蟒科蛇(也稱為蟒蛇)的HTML表格。
現(xiàn)在,我們得到了一個包含7個表(len(df))的列表。如果我們?nèi)ikipedia頁面,我們可以看到第一個表是右邊的那個。然而,在本例中,我們可能對第二個表更感興趣。
在第三個示例中,我們將從瑞典的covid-19病例中讀取HTML表。這里,我們將使用read_html方法的一些附加參數(shù)。具體來說,我們將使用match參數(shù)。在此之后,我們還需要清洗數(shù)據(jù),最后,我們將進(jìn)行一些簡單的數(shù)據(jù)可視化操作。
如上圖所示,該表格的標(biāo)題為:“瑞典各郡新增COVID-19病例”。現(xiàn)在,我們可以使用match參數(shù)并將其作為一個字符串輸入:
通過這種方式,我們只得到這個表,但它仍然是一個dataframes列表。現(xiàn)在,如上圖所示,在底部,我們有三個需要刪除的行。因此,我們要刪除最后三行。
現(xiàn)在,我們將使用Pandas iloc刪除最后3行。注意,我們使用-3作為第二個參數(shù)(請確保你查看了這個Panda iloc教程,以獲得更多信息)。最后,我們還創(chuàng)建了這個dataframe的一個副本。
在下一節(jié)中,我們將學(xué)習(xí)如何將多索引列名更改為單個索引。
現(xiàn)在,我們要去掉多索引列。也就是說,我們將把2列索引(名稱)變成唯一的列名。這里,我們將使用DataFrame.columns 和 DataFrame.columns,get_level_values:
最后,正如你在“date”列中所看到的,我們使用Pandas read_html從WikiPedia表格抓取了一些注釋。接下來,我們將使用str.replace方法和一個正則表達(dá)式來刪除它們:
現(xiàn)在,我們繼續(xù)使用Pandas set_index將日期列變成索引。這樣一來,我們稍后就可以很容易地創(chuàng)建一個時間序列圖。
現(xiàn)在,為了能夠繪制這個時間序列圖,我們需要用0填充缺失的值,并將這些列的數(shù)據(jù)類型更改為numeric。這里我們也使用了apply方法。最后,我們使用cumsum方法來獲得列中每個新值累加后的值:
在最后一個示例中,我們使用Pandas read_html獲取我們抓取的數(shù)據(jù),并創(chuàng)建了一個時間序列圖。現(xiàn)在,我們還導(dǎo)入了matplotlib,這樣我們就可以改變Pandas圖例的標(biāo)題的位置:
在這個Pandas教程中,我們學(xué)習(xí)了如何使用Pandas read_html方法從HTML中抓取數(shù)據(jù)。此外,我們使用來自一篇Wikipedia文章的數(shù)據(jù)來創(chuàng)建了一個時間序列圖。最后,我們也可以通過參數(shù)index_col來使用Pandas read_html將' Date '列設(shè)置為索引列。
英文原文:https://www.marsja.se/how-to-use-pandas-read_html-to-scrape-data-from-html-tables
譯者:一瞬
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。