php 抓取并输出给定​​标签中的特定值或数字

2023-12-31

所以我对 php 很陌生。但在一些帮助下,我已经弄清楚如何抓取具有像 h1 class=____ 这样的标签标识符的网站

更好的是,我已经弄清楚如何输出我想要的精确单词或值,只要它由空格分隔即可。例如,如果给定的标签名称 的输出为“30 个球”,我可以指定 echo[0],并且只会输出 30 个球。这太棒了。

不过,我遇到了一个问题,我是否正在尝试提取一个不以空格分隔的值。所以我的意思是,假设我想要“-34.89”作为输出(更准确地说,无论网站上的占位符中的数字是什么,因为源网站上的数字可能会随着时间的推移而变化)。

但是,我得到的输出是“-34.89dowjonesstockchange”。那里没有空格。

我该怎么做才能输出-34.89?或者,无论某一天该位置上的数字是什么。在上面的输出中必须有某种方式来表示,仅输出 ex 的值 [0,1,2,3,4,5],就值的数量而言,这将是 -34.89。

下面是一个网站上的测试示例,输出由“ ”空格确定的单词和值。这几乎是我所需要的,但缺少这种更精确的方式。

// this function is a scraping function for ethereumchange
function getEthereumchange(){
    $doc = new DOMDocument;

    // We don't want to bother with white spaces
    $doc->preserveWhiteSpace = false;


    $doc->strictErrorChecking = false;
    $doc->recover = true;

    $doc->loadHTMLFile('https://coinmarketcap.com/');



    $xpath = new DOMXPath($doc);

    $query = "//tr[@id='id-ethereum']";




    $entries = $xpath->query($query);
    foreach ($entries as $entry) {
        $result = trim($entry->textContent); 
        $ret_ = explode(' ', $result);
        //make sure every element in the array don't start or end with blank
        foreach ($ret_ as $key=>$val){
            $ret_[$key]=trim($val);
        }
        //delete the empty element and the element is blank "\n" "\r" "\t"
        //I modify this line
        $ret_ = array_values(array_filter($ret_,deleteBlankInArray));
            
        //echo the last element
        file_put_contents(globalVars::$_cache_dir . "ethereumchange", 
$ret_[7]);

    }

太感谢了。


如果你想使用第三方库,你可以使用https://github.com/rajanrx/php-scrape https://github.com/rajanrx/php-scrape

<?php

use Scraper\Scrape\Crawler\Types\GeneralCrawler;
use Scraper\Scrape\Extractor\Types\MultipleRowExtractor;

require_once(__DIR__ . '/../vendor/autoload.php');
date_default_timezone_set('UTC');

// Create crawler
$crawler = new GeneralCrawler('https://coinmarketcap.com/');

// Setup configuration
$configuration = new \Scraper\Structure\Configuration();
$configuration->setTargetXPath('//table[@id="currencies"]');
$configuration->setRowXPath('.//tbody/tr');
$configuration->setFields(
    [
        new \Scraper\Structure\TextField(
            [
                'name'  => 'Name',
                'xpath' => './/td[2]/a',
            ]
        ),
        new \Scraper\Structure\TextField(
            [
                'name'  => 'Market Cap',
                'xpath' => './/td[3]',
            ]
        ),
        new \Scraper\Structure\RegexField(
            [
                'name'  => '% Change',
                'xpath' => './/td[7]',
                'regex' => '/(.*)%/'
            ]
        ),
    ]
);

// Extract  data
$extractor = new MultipleRowExtractor($crawler, $configuration);
$data = $extractor->extract();
print_r($data);

将打印出以下内容:

Array
(
    [0] => Array
        (
            [Name] => Bitcoin
            [Market Cap] => $42,495,710,233
            [% Change] => -1.09
            [hash] => 76faae07da1d2f8c1209d86301d198b3
        )

    [1] => Array
        (
            [Name] => Ethereum
            [Market Cap] => $28,063,517,955
            [% Change] => -8.10
            [hash] => 18ade4435c69b5116acf0909e174b497
        )

    [2] => Array
        (
            [Name] => Ripple
            [Market Cap] => $11,483,663,781
            [% Change] => -2.73
            [hash] => 5bf61e4bb969c04d00944536e02d1e70
        )

    [3] => Array
        (
            [Name] => Litecoin
            [Market Cap] => $2,263,545,508
            [% Change] => -3.36
            [hash] => ea205770c30ddc9cbf267aa5c003933e
        )
   and so on ...

我希望这对你有帮助:)

免责声明:我是这个库的作者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 抓取并输出给定​​标签中的特定值或数字 的相关文章

随机推荐

  • 在 Mathematica 中求解二元递归方程,这可能吗?

    我尝试使用RSolve求解二变量递归方程数学 但它只是重复我输入的内容 是否可以求解两个变量递归方程数学 也许您应该在问题中包含方程式 因为您可能只是使用RSolve错误地 数学可以解一些二变量递推方程 但不是全部 有时免费套餐Guess
  • HTML 源代码中没有嵌套链接元素的嵌套超链接区域

    我想要一些看起来和行为都像大矩形 整页宽 内的超链接的东西 这也是超链接 下面是它应该是什么样子的 ASCII 艺术表示 Some text link 整个外部矩形 块元素 将成为超链接 在这个矩形内应该有一些文本 并且在该文本的末尾应该有
  • 手动实现bayern转RGB

    我正在尝试实现图像转换 Bayern Pattern gt RGB I uploaded this image 这是我的代码片段 import cv2 import numpy as np from matplotlib import py
  • 使用 Python Logging 记录出现两次的消息

    我正在使用 Python 日志记录 由于某种原因 我的所有消息都出现了两次 我有一个配置日志记录的模块 BUG It s outputting logging messages twice not sure why it s not the
  • pcap_pkthdr 是做什么用的?

    代码片段来自here https www winpcap org docs docs 40 2 html group wpcap tut6 html void packet handler u char param const struct
  • 如何使用 .NET Core 从 nuget 从命令行下载包?

    微软软件包Linux 上的 NET Core https learn microsoft com en us nuget tools cli ref install对于Ubuntu 我目前正在使用它 我现在想安装Json NET https
  • Spring:POJO的@Autowired,不由Spring管理[重复]

    这个问题在这里已经有答案了 我使用 Autowired 在 POJO 中注入一些服务 这些服务注册为 Bean 如果一旦 POJO 由 Spring 管理 它也在 Spring Config 上注册为 Bean 那么注入服务就没有问题 但是
  • 在 Linux 中将文本文件中的空格替换为逗号

    我需要编辑一些文本文件 来自sar 并将它们转换为 CSV 文件 我需要使用 sed 或 awk 函数 Linux 中的简单 shell 脚本 更改每个空格 可能是输出中数字之间的制表符 谁能帮我 我使用的每个命令根本没有改变文件 我试过g
  • 如何使滚动条在有角度的材料中始终可见?

    所以目前 我正在使用角度材料及其默认滚动 但我认为它是完美的滚动条 用作滚动条的滚动设计 但只有当用户尝试滚动页面 div 时才会显示滚动 我尝试阅读 Angular Material 的滚动 api 但没有可以在此处使用的属性 我已经把o
  • Selenium 中的 WebDriver 和 WebElement 有什么区别?

    Selenium 中的 WebDriver 和 WebElement 有什么区别 示例代码 WebDriver driver new FirefoxDriver driver get http www google com WebEleme
  • 反应本机 PIP

    我需要将画中画模式添加到反应本机应用程序 iOS 中 但我不知道如何去做 我看到这是react native video 的一个功能 但我对视频使用了不同的模块 所以我只能将画中画添加为单独的功能 任何包含有关如何设置的详细信息的文档 博客
  • Puppeteer 流程​​逻辑,检查导航是否发生(与等待)

    寻找一些反馈 在 Puppeteer 中 我想检查导航是否发生 如果发生则执行某些操作 否则如果未发生则执行其他操作 例如重试 我想出的两种方法是 if await page url finalURL let t 0 busy while
  • Selenium WebDriver Click() 在 IE9 中失败

    我看过很多其他类似的帖子 不幸的是无法解决这个问题 所以这里 我正在使用 Selenium WebDriver C 实现 版本 2 15 来驱动一个相当简单的网页 该页面包含一个表单 其中有两个用于用户名和密码的 以及一个用于提交表单的 我
  • 使用 tidyverse 和 broom 进行许多回归:相同的因变量,不同的自变量

    此链接显示了在我们具有相同的自变量但可能有许多不同的因变量的情况下如何回答我的问题 使用 broom 和 tidyverse 对不同的因变量进行回归 https stackoverflow com questions 51642146 us
  • Magento 2:重新索引不起作用

    我做不到重新索引 in 玛根托2 谷歌之后我得到了解决方案We can reindex with shell command php dev shell indexer php reindexall 但它给出了错误 Could not op
  • 无法使用 C# 客户端反序列化日期时间属性 Neo4j

    我正在尝试使用 C 客户端从 Neo4j 中获取强类型对象 这一切都有效 直到我添加DateTime财产 我已成功将数据插入 Neo4j 数据库 并且可以使用控制台查看它 我还可以查询数据 但无法返回任何强类型对象 因为反序列化似乎失败 我
  • Linux C++:如何跨多个文件正确使用模板专业化?

    我有一个奇怪的问题 在 Windows 上 使用 Visual Studio 2010 以及 Intel 编译器 一切都按预期链接 但是 当我尝试在 Linux 上使用 CLang 3 0 编译代码时 它会编译 如果我只使用单个 CPP 文
  • 如何测量 Android wifi 连接中的上传/下载速度和延迟

    我需要一些 api 或操作代码 通过它们我可以测量 android 应用程序的上传 下载速度和 wifi 连接的延迟 您使用的是 2 2 Froyo 或更高版本吗 如果是这样 请在您的应用程序中导入流量统计信息 并在您的应用程序使用互联网时
  • C# 数据绑定不更新 WPF

    我正在尝试在后面的 C 代码而不是 XAML 中进行数据绑定 在 Expression Blend 2 中创建的 XAML 绑定到我的 CLR 对象工作正常 我的 C 实现仅在应用程序启动时更新 之后对 CLR 的后续更改不会更新我的标签内
  • php 抓取并输出给定​​标签中的特定值或数字

    所以我对 php 很陌生 但在一些帮助下 我已经弄清楚如何抓取具有像 h1 class 这样的标签标识符的网站 更好的是 我已经弄清楚如何输出我想要的精确单词或值 只要它由空格分隔即可 例如 如果给定的标签名称 的输出为 30 个球 我可以