感谢阅读。我尝试从亚马逊解析一系列网址,收集4个变量($ name,$ price,$ stars,$ reviews),并在Foreach循环的每次迭代中将每个变量的值存储到MySQL中
我遇到的问题是只有来自第一个网址的信息存储在MySQL中(正如您从数组中看到的那样,我有4个网站,我试图对此进行测试。< / p>
我知道获取变量的正确值的代码是正确的,因为这也适用于第一个网站,只是没有完成其余的工作,我无法弄清楚原因。
非常感谢任何帮助。谢谢!
function getSQL()
{
include('simple_html_dom.php');
$urlArray = array("http://www.amazon.com/kindle-fire-hdx-student-gaming-tablet/dp/B00BWYQ9YE/ref=sr_1_1?ie=UTF8&qid=1403276865&sr=8-1&keywords=kindle+fire+hdx", "http://www.amazon.com/Kindle-Fire-HDX-Display-Wi-Fi/dp/B00CUTT4HY/ref=sr_1_2?ie=UTF8&qid=1403276882&sr=8-2&keywords=kindle+fire+hdx",
"http://www.amazon.com/Kindle-Fire-HDX-Display-Wi-Fi/dp/B00BWYRF7E/ref=sr_1_3?ie=UTF8&qid=1403276882&sr=8-3&keywords=kindle+fire+hdx", "http://www.amazon.com/kindle-fire-hdx-best-movie-tablet-8.9/dp/B00BHJRYYS/ref=sr_1_5?ie=UTF8&qid=1403276882&sr=8-5&keywords=kindle+fire+hdx");
foreach ($testArray as $url)
{
$html = file_get_html("$url");
$name = $html->find('h1[class="parseasinTitle"]', 0)->plaintext; //line 6455
$price = $html->find('b[class=priceLarge]', 0)->plaintext; //line 6650
$string = $html->plaintext;
$wordToFind = 'stars';
$numWordsToWrap = 4;
$words = preg_split('/\s+/', $string);
if (($pos = array_search($wordToFind, $words)) !== FALSE) {
$start = ($pos - $numWordsToWrap > 0) ? $pos - $numWordsToWrap : 0;
$length = (($pos + ($numWordsToWrap + 1) < count($words)) ? $pos + 1 : count($words) - 1) - $start;
$slice = array_slice($words, $start, $length);
$stars = implode(' ', $slice);
} else echo 'I didn\'t find it';
$wordToFind2 = 'reviews';
$numWordsToWrap2 = 4;
$words2 = preg_split('/\s+/', $string);
if (($pos2 = array_search($wordToFind2, $words2)) !== FALSE) {
$start2 = ($pos2 - $numWordsToWrap2 > 0) ? $pos2 + 1 : 0;
$length2 = (($pos2 + ($numWordsToWrap2 + 1) < count($words2)) ? $pos2 + ($numWordsToWrap2 + 1) : count($words2) - 1) - $start2;
$slice2 = array_slice($words2, $start2, $length2);
$reviews = implode(' ', $slice2);
$reviews = str_replace(" ", "", $reviews);
} else echo 'I didn\'t find it';
$amazon_all_sql = "
insert into kindlefire
values('$name', '$price', '$stars', '$reviews');
";
return $amazon_all_sql;
}
}
答案 0 :(得分:1)
您需要替换以下行
return $amazon_all_sql;
foreach循环执行第一轮然后遇到return语句。这将终止函数中的所有处理。删除它并将其替换为执行sql的语句。
如果您只想查看生成的所有SQL,请更改以下行,然后将返回值拉出foreach循环。 (注意。=运算符用于将所有SQL附加到$ amazon_all_sql变量)
$amazon_all_sql .= "
insert into kindlefire
values('$name', '$price', '$stars', '$reviews');
";
}
return $amazon_all_sql;
答案 1 :(得分:0)
修复您的返回和您的阵列名称。
function getSQL()
{
include('simple_html_dom.php');
$urlArray = array("http://rads.stackoverflow.com/amzn/click/B00BWYQ9YE", "http://rads.stackoverflow.com/amzn/click/B00CUTT4HY",
"http://rads.stackoverflow.com/amzn/click/B00BWYRF7E", "http://rads.stackoverflow.com/amzn/click/B00BHJRYYS");
foreach ($urlArray as $url)
{
$html = file_get_html("$url");
$name = $html->find('h1[class="parseasinTitle"]', 0)->plaintext; //line 6455
$price = $html->find('b[class=priceLarge]', 0)->plaintext; //line 6650
$string = $html->plaintext;
$wordToFind = 'stars';
$numWordsToWrap = 4;
$words = preg_split('/\s+/', $string);
if (($pos = array_search($wordToFind, $words)) !== FALSE) {
$start = ($pos - $numWordsToWrap > 0) ? $pos - $numWordsToWrap : 0;
$length = (($pos + ($numWordsToWrap + 1) < count($words)) ? $pos + 1 : count($words) - 1) - $start;
$slice = array_slice($words, $start, $length);
$stars = implode(' ', $slice);
} else echo 'I didn\'t find it';
$wordToFind2 = 'reviews';
$numWordsToWrap2 = 4;
$words2 = preg_split('/\s+/', $string);
if (($pos2 = array_search($wordToFind2, $words2)) !== FALSE) {
$start2 = ($pos2 - $numWordsToWrap2 > 0) ? $pos2 + 1 : 0;
$length2 = (($pos2 + ($numWordsToWrap2 + 1) < count($words2)) ? $pos2 + ($numWordsToWrap2 + 1) : count($words2) - 1) - $start2;
$slice2 = array_slice($words2, $start2, $length2);
$reviews = implode(' ', $slice2);
$reviews = str_replace(" ", "", $reviews);
} else echo 'I didn\'t find it';
$amazon_all_sql = "
insert into kindlefire
values('$name', '$price', '$stars', '$reviews');
";
}
return $amazon_all_sql;
}