【问题标题】:PHP Web Scraping And JSON or Array OutputPHP Web Scraping 和 JSON 或数组输出
【发布时间】:2016-11-24 19:42:53
【问题描述】:

我正在尝试用 PHP 抓取亚马逊,但我不知道我做错了什么。问题是我无法访问我抓取的所有数据。这是我的代码:

<?php

  $url = 'https://www.amazon.com/s/ref=nb_sb_ss_c_1_9?url=search-alias%3Daps&field-keywords=most+sold+items+on+amazon&sprefix=most+sold%2Caps%2C435&crid=348CE8G406XVG&rh=i%3Aaps%2Ck%3Amost+sold+items+on+amazon';

  $html = file_get_html($url);

  foreach ($html->find('h2[class=a-size-medium]') as $element) {

    echo "<li>" .$element->plaintext."</li><br>";       

  } 
?>

foreach 语句循环并输出纯文本,但我希望能够将纯文本传递给变量或数组。问题是,如果我这样做并输出结果,我只会得到纯文本数组的最后一个字符串。我做了很多研究来找出我做错了什么,但我找不到。请任何帮助将不胜感激。这是我想要实现的目标:

<?php
  $url = 'https://www.amazon.com/s/ref=nb_sb_ss_c_1_9?url=search-alias%3Daps&field-keywords=most+sold+items+on+amazon&sprefix=most+sold%2Caps%2C435&crid=348CE8G406XVG&rh=i%3Aaps%2Ck%3Amost+sold+items+on+amazon';
  $hold = array();
  $html = file_get_html($url);

  foreach ($html->find('h2[class=a-size-medium]') as $element) {

    $hold = $element->plaintext;        

  } 
  print_r($hold);

?>

第二个代码将输出纯文本的最后一个字符串:“Rubbermaid LunchBlox Side Container Kit, 2-Pack, 1806176”。我也尝试通过编码和解码纯文本来实现这一点,但没有任何改变。我做错了什么?

【问题讨论】:

  • 我觉得 PHP 可能不是最好的语言……
  • @RoshanBhumbra;感谢您的评论。你能解释一下为什么吗?
  • Php 更适合提供页面而不是抓取它们,并且有各种怪癖使其不太适合扩展操作。例如,它有一个执行时间限制,所以你不能让它像你一样用许多其他语言不断地抓取页面。
  • @roshanbhumbra ini_set('max_execution_time', -1); “最大执行时间,以秒为单位。如果设置为零,则没有时间限制。” PHP 非常适合抓取。
  • 话虽如此,amazon 非常适合 api - 不是刮,恕我直言;但是,据我们所知,这是一个周末购物项目,在这种情况下,抓取是有意义的。

标签: php arrays web-scraping


【解决方案1】:

而不是将数组保持设置为字符串...向数组添加新元素:

$hold[] = $element->plaintext;        

【讨论】:

  • 感谢您的回复。你为什么把这个问题降级了?我已经重新格式化了。我不记得使用 backtics。无论如何,感谢您的评论。
  • 朋友不是我
  • 好的。谢谢。我注意到我错过了将 $hold 声明为数组。您的贡献解决了问题。再次感谢。
  • 不用担心,为了好玩,您不必在 php 中声明数组。你可以把它拿出来,虽然对其他程序员来说不太清楚,但它的功能是一样的。 fwiw。
猜你喜欢
  • 2016-09-05
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2017-04-12
  • 2021-02-19
相关资源
最近更新 更多