php - 使用 Symfony DomCrawler 在 html 元素属性(data-react-props)中提取数据
问题描述
我需要提取页面内的json,更准确地说是标签内的divdata-react-props
<div data-react-class="GamePageHeader" data-react-props="{"id":1274,"slug":[...]}
如何提取反应道具中的 json?我相信使用 HtmlDomParser 我无法做到这一点。
编辑:
感谢 Prateek 的回复,我编写了代码:
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\CssSelector\CssSelectorConverter;
$html = file_get_html('https://www.igdb.com/games/simcity--2');
$crawler = new Crawler($html);
$data = $crawler->filter('div[data-react-class="GamePageHeader"]')->attr('data-react-props');
print $data;
但我总是得到错误
LOG.error: Expecting a DOMNodeList or DOMNode instance, an array, a string, or null, but got "simple_html_dom".
我已经安装了软件包symfony/css-selector
并symfony/dom-crawler
在 Laravel 5.8 中
解决方案
是的,您不能使用 HtmlDomParser 执行此操作。但是,这可以使用 symfomy 的dom crawler来完成。
第 1 步:使用 安装它,同时使用安装composer require symfony/dom-crawler
css -selectorcomposer require symfony/css-selector
第二步:获取html并实例化爬虫
$html = file_get_contents('https://www.igdb.com/games/simcity--2');
$crawler = new Crawler($html); // same as HtmlDomParser::str_get_html( $html);
第 3 步:使用过滤器抓取正文并获取所需的 dom 元素并使用 attr 获取标签内的值
$data = $crawler->filter('div[data-react-class="GamePageHeader"]')->attr('data-react-props');
推荐阅读
- .net - 获取请求长度以修复“超出最大请求长度”
- javascript - 在 JavaScript 类中初始化静态变量时可以使用非静态变量吗?
- php - 致命错误:未捕获错误:调用未定义函数 PDFNet_Initialize
- c# - C# 和 CsvHelper - 如何打开文件、修改值和重写文件
- excel - 使用表术语的 COUNTIF
- node.js - 在反应轮询中从 API 获取数据
- django - 带有列表视图的 Django 模型related_list
- javascript - 仅使用 React 钩子的功能齐全的倒数计时器
- jquery - 解码 base64 JSON 文件 - 用 ajax 方法
- java - 正则表达式过滤掉字符串