如何使用cURL从网站获取特定数据,然后使用php将其保存到我的数据库中

时间:2012-03-01 12:05:49

标签: php mysql

任何人都可以告诉我如何使用curl或file_get_contents从网站下载特定数据,然后将这些特定数据保存到我的mysql数据库中。我希望从这个网站获得最新的电影http://www.traileraddict.com/,我希望将其保存在我的数据库中(每天都有;这个文本和html链接将显示在我的网站上)。我只需要文本和HTML链接。(在图片中突出显示)

enter image description here

我到处搜索但我找不到任何有用的教程。我有两个主要问题要问

1)如何使用cURL或file_get_contents获取特定数据。

2)如何将特定内容保存到我的mysql数据库表中(一列中的文本和另一列中的链接)

2 个答案:

答案 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作业。