【发布时间】: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