任何人都可以告诉我如何使用curl或file_get_contents从网站下载特定数据,然后将这些特定数据保存到我的mysql数据库中。我希望从这个网站获得最新的电影http://www.traileraddict.com/,我希望将其保存在我的数据库中(每天都有;这个文本和html链接将显示在我的网站上)。我只需要文本和HTML链接。(在图片中突出显示)
我到处搜索但我找不到任何有用的教程。我有两个主要问题要问
1)如何使用cURL或file_get_contents获取特定数据。
2)如何将特定内容保存到我的mysql数据库表中(一列中的文本和另一列中的链接)
答案 0 :(得分:14)
使用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
答案 1 :(得分:8)
这应该有效,但它很麻烦,如果您正在抓取的网站碰巧改变它的标记会影响抓取,它可能会破坏:
$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 e.g.
$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作业。