整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PHP神器:轻松获取网页HTML元素

文深入探讨如何运用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开发过程中网页元素搜寻有所裨益。

C#中,你可以使用System.Net.Http.HttpClient来从网页获取HTML内容,然后使用System.Text.RegularExpressions.Regex来解析和提取HTML中的<title>标签内容。以下是一个简单的示例,演示了如何执行此操作:

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
        {
            // 要抓取内容的网页URL
            string url = "http://example.com";
            
            // 发送HTTP GET请求获取网页内容
            string htmlContent = await client.GetStringAsync(url);

            // 正则表达式,用于匹配<title>标签内的内容
            string titlePattern = @"<title>(.+?)</title>";

            // 使用Regex.Match方法查找匹配项
            Match match = Regex.Match(htmlContent, titlePattern);

            // 如果找到了匹配项
            if (match.Success)
            {
                // 提取<title>标签内的内容
                string title = match.Groups[1].Value;

                // 输出提取到的title
                Console.WriteLine("网页标题: " + title);
            }
            else
            {
                Console.WriteLine("未找到<title>标签。");
            }
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine("\nException Caught!");
            Console.WriteLine("Message :{0} ", e.Message);
        }
    }
}

在这个示例中,我们首先创建了一个HttpClient实例,然后使用GetStringAsync方法异步获取网页的HTML内容。接下来,我们定义了一个正则表达式titlePattern,用于匹配<title>标签中的文本。Regex.Match方法用于在HTML内容中查找匹配项。如果找到匹配项,我们就从匹配结果中提取出标题文本并打印出来。

请注意,使用正则表达式解析HTML可能不是最可靠的方法,因为HTML的结构可能会非常复杂,并且正则表达式可能无法正确处理所有情况。在实际应用中,建议使用HTML解析库(如AngleSharp或HtmlAgilityPack)来解析HTML文档,这样可以更健壮和准确地提取所需的信息。

下面是一个使用HtmlAgilityPack库提取网页标题的示例:

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
        {
            // 要抓取内容的网页URL
            string url = "http://example.com";
            
            // 发送HTTP GET请求获取网页内容
            string htmlContent = await client.GetStringAsync(url);

            // 加载HTML内容到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("网页标题: " + title);
            }
            else
            {
                Console.WriteLine("未找到<title>标签。");
            }
        }
        catch (HttpRequestException e)
        {
            Console.WriteLine("\nException Caught!");
            Console.WriteLine("Message :{0} ", e.Message);
        }
    }
}

在这个示例中,我们使用了HtmlAgilityPack库来加载HTML内容,并使用XPath查询来定位<title>标签。这种方法通常比使用正则表达式更加稳定和可靠。在使用HtmlAgilityPack之前,你需要通过NuGet安装它:

bashInstall-Package HtmlAgilityPack

或者,如果你使用.NET Core CLI,可以运行:

本Pandas教程中,我们将详细介绍如何使用Pandas read_html方法从HTML中获取数据。首先,在最简单的示例中,我们将使用Pandas从一个字符串读取HTML。其次,我们将通过几个示例来使用Pandas read_html从Wikipedia表格中获取数据。在之前的一篇文章(关于Python中的探索性数据分析)中,我们也使用了Pandas从HTML表格中读取数据。

在Python中导入数据

在开始学习Python和Pandas时,为了进行数据分析和可视化,我们通常从实践导入数据开始。在之前的文章中,我们已经了解到我们可以直接在Python中输入值(例如,从Python字典创建Pandas dataframe)。然而,通过从可用的源导入数据来获取数据当然更为常见。这通常是通过从CSV文件或Excel文件中读取数据来完成的。例如,要从一个.csv文件导入数据,我们可以使用Pandas read_csv方法。这里有一个如何使用该方法的快速的例子,但一定要查看有关该主题的博客文章以获得更多信息。

现在,上面的方法只有在我们已经有了合适格式的数据(如csv或JSON)时才有用(请参阅关于如何使用Python和Pandas解析JSON文件的文章)。

我们大多数人会使用Wikipedia来了解我们感兴趣的主题信息。此外,这些Wikipedia文章通常包含HTML表格。

要使用pandas在Python中获得这些表格,我们可以将其剪切并粘贴到一个电子表单中,然后,例如使用read_excel将它们读入Python。现在,这个任务当然可以用更少的步骤来完成:我们可以通过web抓取来对它进行自动化。一定要查看一下什么是web抓取。

先决条件

当然,这个Pandas读取HTML教程将要求我们安装Pandas及其依赖项。例如,我们可以使用pip来安装Python包,比如Pandas,或者安装一个Python发行版(例如,Anaconda、ActivePython)。下面是如何使用pip安装Pandas: pip install pandas。

注意,如果出现消息说有一个更新版本的pip可用,请查看这篇有关如何升级pip的文章。注意,我们还需要安装lxml或BeautifulSoup4,当然,这些包也可以使用pip来安装: pip install lxml。

Pandas read_html 语法

下面是如何使用Pandas read_html从HTML表格中抓取数据的最简单的语法:

现在我们已经知道了使用Pandas读取HTML表格的简单语法,接下来我们可以查看一些read_html示例。

Pandas read_html 示例1:

第一个示例是关于如何使用Pandas read_html方法的,我们将从一个字符串读取HTML表格。

现在,我们得到的结果不是一个Pandas DataFrame,而是一个Python列表。也就是说,如果我们使用type函数,我们可以看到:

如果我们想得到该表格,我们可以使用列表的第一个索引(0)

Pandas read_html 示例 2:

在第二个Pandas read_html示例中,我们将从Wikipedia抓取数据。实际上,我们将得到蟒科蛇(也称为蟒蛇)的HTML表格。

现在,我们得到了一个包含7个表(len(df))的列表。如果我们去Wikipedia页面,我们可以看到第一个表是右边的那个。然而,在本例中,我们可能对第二个表更感兴趣。

Pandas read_html 示例 3:

在第三个示例中,我们将从瑞典的covid-19病例中读取HTML表。这里,我们将使用read_html方法的一些附加参数。具体来说,我们将使用match参数。在此之后,我们还需要清洗数据,最后,我们将进行一些简单的数据可视化操作。

使用Pandas read_html和匹配参数抓取数据:

如上图所示,该表格的标题为:“瑞典各郡新增COVID-19病例”。现在,我们可以使用match参数并将其作为一个字符串输入:

通过这种方式,我们只得到这个表,但它仍然是一个dataframes列表。现在,如上图所示,在底部,我们有三个需要删除的行。因此,我们要删除最后三行。

使用Pandas iloc删除最后的行

现在,我们将使用Pandas iloc删除最后3行。注意,我们使用-3作为第二个参数(请确保你查看了这个Panda iloc教程,以获得更多信息)。最后,我们还创建了这个dataframe的一个副本。

在下一节中,我们将学习如何将多索引列名更改为单个索引。

将多索引更改为单个索引并删除不需要的字符

现在,我们要去掉多索引列。也就是说,我们将把2列索引(名称)变成唯一的列名。这里,我们将使用DataFrame.columns 和 DataFrame.columns,get_level_values:

最后,正如你在“date”列中所看到的,我们使用Pandas read_html从WikiPedia表格抓取了一些注释。接下来,我们将使用str.replace方法和一个正则表达式来删除它们:

使用Pandas set_index更改索引

现在,我们继续使用Pandas set_index将日期列变成索引。这样一来,我们稍后就可以很容易地创建一个时间序列图。

现在,为了能够绘制这个时间序列图,我们需要用0填充缺失的值,并将这些列的数据类型更改为numeric。这里我们也使用了apply方法。最后,我们使用cumsum方法来获得列中每个新值累加后的值:

来自HTML表格的时间序列图

在最后一个示例中,我们使用Pandas read_html获取我们抓取的数据,并创建了一个时间序列图。现在,我们还导入了matplotlib,这样我们就可以改变Pandas图例的标题的位置:

结论: 如何将HTML读取到一个 Pandas DataFrame

在这个Pandas教程中,我们学习了如何使用Pandas read_html方法从HTML中抓取数据。此外,我们使用来自一篇Wikipedia文章的数据来创建了一个时间序列图。最后,我们也可以通过参数index_col来使用Pandas read_html将' Date '列设置为索引列。

英文原文:https://www.marsja.se/how-to-use-pandas-read_html-to-scrape-data-from-html-tables
译者:一瞬