может ли кто-нибудь сказать мне, как использовать curl или file_get_contents для загрузки определенных данных с веб-сайта, а затем сохранить эти конкретные данные в моей базе данных mysql. Я хочу получить последние добавления фильмов с этого сайта http://www.traileraddict.com/, и я хочу сохранить его в своей базе данных (ежедневно, этот текст и ссылка html будут показаны на моем сайте). Мне просто нужен текст и html-ссылка (выделено на рис.)
я искал везде, но я не нашел полезного учебника. У меня есть два основных вопроса:
1) Как я могу получить конкретные данные с помощью cURL или file_get_contents.
2) Как я могу сохранить конкретный контент в моей таблице базы данных mysql (текст в одном столбце и ссылку в другом столбце)
Использование cURL:
$ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, 'http://www.something.com'); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true); $content = curl_exec($ch);
Затем вы можете загрузить элемент в объект DOM и проанализировать dom для конкретных данных. Вы также можете попробовать и проанализировать данные с помощью строк поиска, но использование регулярных выражений в HTML сильно осуждается.
$dom = new DOMDocument(); $dom->loadHTML( $content ); // Parse the dom for your desired content
Это должно работать, но это грязно и возможно, что он сломается, если сайт, который вы очищаете, изменит его разметку, которая повлияет на очистку:
$sites[0] = 'http://www.traileraddict.com/'; // use this if you want to retrieve more than one page: // $sites[1] = 'http://www.traileraddict.com/trailers/2'; foreach ($sites as $site) { $ch = curl_init($site); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $html = curl_exec($ch); // ok, you have the whole page in the $html variable // now you need to find the common div that contains all the review info // and that appears to be <div class="info"> (I think you could use abstract aswell) $title_start = '<div class="info">'; $parts = explode($title_start,$html); // now you have an array of the info divs on the page foreach($parts as $part){ // so now you just need to get your title and link from each part $link = explode('<a href="/trailer/', $part); // this means you now have part of the trailer url, you just need to cut off the end which you don't need: $link = explode('">', $link[1]); // this should give something of the form: // overnight-2012/trailer // so just make an absolute url out of it: $url = 'http://www.traileraddict.com/trailer/'.$link[0]; // now for the title we need to follow a similar process: $title = explode('<h2>', $part); $title = explode('</h2>', $title[1]); $title = strip_tags($title[0]); // INSERT DB CODE HERE eg $db_conn = mysql_connect('$host', '$user', '$password') or die('error'); mysql_select_db('$database', $db_conn) or die(mysql_error()); $sql = "INSERT INTO trailers(url, title) VALUES ('".$url."', '".$title."')" mysql_query($sql) or die(mysql_error()); }
Это должно быть так, теперь у вас есть переменная для ссылки и названия, которые вы можете вставить в свою базу данных.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Я написал это сверху головы на работе, поэтому я извиняюсь, если он не работает сразу с места в карьер, но сообщите мне, если это не так, и я попытаюсь помочь дальше.
ТАКЖЕ, я знаю, что это можно сделать умнее и использовать меньше шагов, но это потребует больше внимания с моей стороны, и OP может это сделать, если они захотят, как только они поймут код, который я написал, поскольку я бы предположил, что это будет гораздо важнее то, что они понимают, что я сделал, и смогут самостоятельно отредактировать его.
Кроме того, я бы посоветовал соскабливать сайт по ночам, чтобы не обременять его дополнительным трафиком, и я предлагаю запросить разрешение этого сайта, так как, если они поймают вас, они смогут положить конец вашим выскабливаниям 🙁
Чтобы ответить на ваш последний момент – для запуска этого в заданный период времени вы должны использовать задание cron.