У меня проблема. Это то, что я должен сделать, и код занимает очень много времени для запуска:
Существует 1 веб-сайт, на котором мне нужно собирать данные, и для этого мне нужен мой алгоритм для посещения более 15 000 подразделов этого сайта (то есть www .website.com/item.php? rid = $_id
), где $_id
будет текущей итерацией цикла for
.
Вот проблемы:Как извлечь содержимое из URL?
- Метод настоящее время я использую, чтобы получить исходный код каждой страницы
file_get_contents
, и, как вы можете себе представить, это занимает очень много времени, чтобыfile_get_contents
из 15,000 страниц. - Каждая страница содержит более 900 строк кода, но все, что мне нужно извлечь, составляет около 5 строк, поэтому кажется, что алгоритм тратит много времени, извлекая все 900 строк.
- Некоторые страницы не существует (т.е., возможно, www.website.com/item.php?rid=
2
существует, но www.website.com/item.php?rid=3
не делает), так Мне нужен способ быстрого пропущения этих страниц, прежде чем алгоритм попытается получить его содержимое и потратить кучу времени.
Вкратце, мне нужен способ извлечения небольшой части страницы из 15 000 веб-страниц как можно быстрее и эффективнее.
Вот мой текущий код.
for ($_id = 0; $_id < 15392; $_id++){
//****************************************************** Locating page
$_location = "http://www.website.com/item.php?rid=".$_id;
$_headers = @get_headers($_location);
if(strpos($_headers[0],"200") === FALSE){
continue;
} // end if
$_source = file_get_contents($_location);
//****************************************************** Extracting price
$_needle_initial = "<td align=\"center\" colspan=\"4\" style=\"font-weight: bold\">Current Price:";
$_needle_terminal = "</td>";
$_position_initial = (stripos($_source,$_needle_initial))+strlen($_needle_initial);
$_position_terminal = stripos($_source,$_needle_terminal);
$_length = $_position_terminal-$_position_initial;
$_current_price = strip_tags(trim(substr($_source,$_position_initial,$_length)));
} // end for
Любая помощь вообще очень ценится, так как мне действительно нужно решение!
Заранее благодарю вас за помощь!
Если вы не можете настроить удаленный сервер, чтобы просто дать вам эти 5 строк каждый раз, вам нужно загрузить весь файл и извлечь все, что вам нужно. Не обойти это. Вы можете [проверить его существование] (http://stackoverflow.com/questions/981954/how-can-one-check-to-see-if-a-remote-file-exists-using-php) каждый раз, чтобы избегайте загружать несуществующие страницы, хотя – Clive
- это строка файла после определенных байтов байтов – sanjeev
вы можете использовать RollingCurl.RollingCurl позволяет обрабатывать несколько HTTP-запросов параллельно с использованием библиотеки CURL PHP. [link] (https://github.com/takinbo/rolling-curl) – jingyu