使用Laravel& amp; Crawling一个网站Elvedia \ Goutte:如何提取JSON

时间:2014-06-13 19:24:53

标签: php json goutte

我设法使用Goutte Laravel 4成功访问远程JSON资源:

$client = Goutte::getNewClient();

//*
$crawler = $client->request('GET', 'http://domain.mg/admin');

$form = $crawler->selectButton('Login')->form();
$crawler = $client->submit($form, array('username' => 'username', 'password' => 'password'));

//*/

$crawler = $client->request('GET', 'http://domain.mg/usergroup/list'); // Yields JSON Response

return dd($crawler);

它产生如下输出:

  

object(Symfony \ Component \ DomCrawler \ Crawler)#285(4){   [ “URI”:保护] => string(36)“http://domain.mg/usergroup/list”   [ “defaultNamespacePrefix”: “的Symfony \元器件\ DomCrawler \履带”:私人] =>   string(7)“default”   [ “命名空间”: “的Symfony \元器件\ DomCrawler \履带”:私人] =>   array(0){} [“storage”:“SplObjectStorage”:private] => array(1){   [ “0000000075faaa10000000001af55ef8”] => array(2){[“obj”] =>   object(DOMElement)#241(17){[“tagName”] => string(4)“html”   [ “schemaTypeInfo”] => NULL [“nodeName”] => string(4)“html”   [ “的nodeValue”] => string(438)“[{”id“:1,”group_name“:”Compte   主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL   倾倒   comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur   D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不   注释 “ ”group_desc“:” AUTRES   采用\ u00e9s “ ”group_level“:6},{ ”ID“:41, ”GROUP_NAME“: ”INVIT \ u00e9“, ”group_desc“: ”客人“, ”group_level“:2}]”   [ “节点类型”] => int(1)[“parentNode”] => string(22)“(对象值   省略)“[”childNodes“] => string(22)”(省略对象值)“   [ “则firstChild”] => string(22)“(省略对象值)”[“lastChild”] =>   string(22)“(省略对象值)”[“previousSibling”] =>串(22)   “(省略对象值)”[“attributes”] => string(22)“(对象值   省略)“[”ownerDocument“] => string(22)”(省略对象值)“   [ “的namespaceURI”] => NULL [“prefix”] => string(0)“”[“localName”] =>   string(4)“html”[“baseURI”] => NULL [“textContent”] =>串(438)   “[{” ID “:1,” GROUP_NAME “:” 孔特   主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL   倾倒   comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur   D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不   注释 “ ”group_desc“:” AUTRES   采用\ u00e9s “ ”group_level“:6},{ ”ID“:41, ”GROUP_NAME“: ”INVIT \ u00e9“, ”group_desc“: ”客人“, ”group_level“:2}]”   } [“inf”] => NULL}}}

我偶然发现在$crawler对象中提取/转换JSON的内部表示。怎么可能这样做?

2 个答案:

答案 0 :(得分:1)

深入研究课程Symfony\Component\DomCrawler\Crawler文档,我找到了

public string html()

    Returns the first node of the list as HTML.

    Return Value

    string  The node html

按预期工作。

return dd($crawler)转为return ($crawler->html())会产生:

  

[{ “ID”:1, “GROUP_NAME”:“孔特   主 “ ”group_desc“: ”Administrateur“, ”group_level“:9},{ ”ID“:2 ”组名“:” PROFIL   倾倒   comptables “ ”group_desc“: ”Comptables“, ”group_level“:2},{ ”ID“:3 ”GROUP_NAME“:” Validateur   D'运算\ u00e9ration “ ”group_desc“: ”Superviseur“, ”group_level“:9},{ ”ID“:18, ”GROUP_NAME“:” 不   注释 “ ”group_desc“:” AUTRES   采用\ u00e9s”, “group_level”:6},{ “ID”:41, “GROUP_NAME”: “INVIT \ u00e9”, “group_desc”: “客人”, “group_level”:2}]

结论

Goutte很好地管理了复杂(Laravel | crsf机制)登录过程,但我不喜欢使用html()来删除JSON字符串。

使用return ($crawler->text())获得相同的结果对我的意见更加“中立”。

答案 1 :(得分:0)

我不确定你想要用JSON做什么,但将JSON字符串转换为数组非常简单:

$data = json_decode($jsonString);