php函式preg_match_all解析yahoo搜尋結果

小弟打算利用寫一支可以擷取yahoo搜尋結果的相關詞的程式

本例以"淡定紅茶"為搜尋條件

以下為程式碼:

$ch = curl_init();

$options = array(CURLOPT_URL =>

'http://tw.search.yahoo.com/search;_ylt=A8tUwYBQ.MF...

5%AE%9A%E7%B4%85%E8%8C%B6&fr2=sb-top&fr=yfp&type_param=',

CURLOPT_HEADER => false,

CURLOPT_RETURNTRANSFER => true,

CURLOPT_USERAGENT => "Google Bot",

CURLOPT_FOLLOWLOCATION => true

);

curl_setopt_array($ch, $options);

$output = curl_exec($ch);

curl_close($ch);

$output=iconv("UTF-8","big5",$output);

preg_match_all('/<h2>相關詞:<\/h2>(.*?)<\/a><\/li><\/ul><\/div><h2

class="off-left">/si',$output,$matches);

preg_match_all('/<a[^>]*+>([^<]*+(?:(?!<\/?+a)<[^<]*+)*+)<\/a>/i',$matches[0][\

0],$matches2,PREG_SET_ORDER);

print $matches2[0][0].", ".$matches2[0][1]."\n";

print $matches2[1][0].", ".$matches2[1][1]."\n";

print_r($matches);

小弟遇到的問題是:

$output是有值的,代表抓取整個頁面內容有成功

但利用preg_match_all()函式去解析所要的內容(相關詞)後,$matches陣列裡卻是空的

不知道是正規表示是有寫錯,還是其他地方有出錯呢?

麻煩各位大大指點迷津,感恩> <

2 Answers

Rating
  • 8 years ago
    Favorite Answer

    preg_match_all('/< \/li>/',

    file_get_contents('http://tw.search.yahoo.com/search?p=%E6%B7%A1%E5%A...

    $get);

    print_r($get);

    2012-05-28 19:32:00 補充:

    會重複再出現一次 不知為啥

    2012-05-28 19:35:23 補充:

    被吃掉了 重貼

    preg_match_all('/<li class="on"><a href=[^,]+,<\/li><\/li>/',

    file_get_contents('http://tw.search.yahoo.com/search?p=%E6%B7%A1%E5%A...

    $get);

    print_r($get);

    2012-05-28 19:35:27 補充:

    小於<和大於>符號要改成全形的小於<大於>符號

    2012-05-28 19:38:18 補充:

    </li></li>加上反斜線<\/li><\/li>

    2012-05-28 19:39:44 補充:

    被吃掉了

    <加上鍵盤上鎮字那斜線/li><加上鍵盤上鎮字那斜線斜線/li>

    2012-05-28 21:53:35 補充:

    我的有跑成功..沒注意你寫的..沒抓到就是寫錯了..你可以參考我寫的..找出自已錯誤

    什麼搜尋結果的廣告則數?

    2012-05-29 18:30:12 補充:

    廣告是抓不到的

    這一句語法 echo file_get_contents('http://tw.search.yahoo.com/search?p=%E6%B7%A1%E5%A...

    抓網頁沒看到廣告

    若要投我告訴我一聲

    2012-06-02 18:43:55 補充:

    preg_match_all('/<li class="on"><a href=[^,]+,</li></li>/',

    file_get_contents('http://tw.search.yahoo.com/search?p=%E6%B7%A1%E5%A...

    $get);

    print_r($get);

    小於<和大於>符號要改成全形的小於<大於>符號

    <加上鍵盤上鎮字那斜線/li><加上鍵盤上鎮字那斜線/li>

    2012-06-02 18:44:56 補充:

    謝謝

  • 謝謝Chris大大!!

    可以請你跟我說我的寫法哪裡錯誤嗎? 為什麼我都抓不到啊@@

    然後假如我還要計算搜尋結果的廣告則數,要怎麼寫呢?

    感謝你!!!

    2012-05-28 21:59:32 補充:

    我對正規表示式不熟...所以都是網路上找來修修改改,也找不出錯在哪裡

    廣告則數就是,例如:搜尋淡定紅茶後,後出現關鍵字廣告

    好買淡定紅茶-爆走下殺價

    淡定哥喝的淡定紅茶!買就抽國際牌清淨機,抗漲精省看招,消費不限次數快來抽大獎

    www.herbuy.com.tw

    高山製茶廠 - 茶葉批發量販

    樂活養生茶飲,紅茶、花茶、玄米綠茶,用心嚴選茶葉,讓您品嘗純淨好茶香!

    www.alp-tea.com

    ......

    我計算總共有幾則

    真的是麻煩你了

    2012-06-01 23:33:40 補充:

    只有你回答,所以我要投你!

Still have questions? Get your answers by asking now.