kbk007 wrote:
全球華文行銷知識庫,...(恕刪)
感謝!!
我剛加入了~已經可以正常看了~!
謝謝您~!!
來我家吧! 艾恩莎拉 I'm Sarah http://imsarahsong.blogspot.com/

資訊來源:
http://www.atmovies.com.tw/home/tv_homepage.html
開眼電影電視娛樂網
是照著該網站的分類全抓
注意:抓的日期很可能會抓到後一日的節目表
不會改local time的時間,不過先抓下後一日節目應該也還好
每次抓時會依日期的不同抓新的節目表,請各位試用!
[更新一次抓今後2天的節目表]
附加壓縮檔: 200705/mobile01-a6e96ef79e3c30ee35a0ba6be33d9139.zip
[增補解說]
前面有人提及說要如何抓不是RSS的網站?那就順便分享一下這個網站的抓法
建議有興趣研究的人可以開啟這份xml,再對照來看
1先研究看到的版面
前面我有一份簡單的說明有提到要先有channel再來是article
我把重點放在如何解channel上,後段的article的部份請參考前文的說明,以
http://www.atmovies.com.tw/home/tv_homepage.html為例
本來我想要這個頁面的每個連結都做成一個channel來抓,但發現
這樣子會暫太多的channel,於是得想辦法全部擠成一個channel
http://tv.atmovies.com.tw/tv/attv.asp?action=channeltime
這頁裏面的上方有大分類的連結,那就從這兒開始下手吧!
下面第2段是一開始我最早做好的版是把每個分類做成一個channel
先著手確認文章都能抓到
2抓channel及article
這裏是綜合類的連結一例,請參考原網站的連結
一開始是這樣寫
...
<channel>
<name>電視-節目表-綜合</name>
<url>http://tv.atmovies.com.tw/tv/attv.asp?action=todaytime&tvfile=20070503A</url>
</channel>
...
<parse_channel>
<![CDATA[
var href = channel.url
var article = new Article();
article.id = href;
article.url = href;
article.header = "測試";
channel.articles.push( article );
]]>
</parse_channel>
<parse_article>
<![CDATA[
var d = new Document(article.url, "big5");
article.body = "";
var nodestory = d.getElementsByAttr("table", "width", "96%")[0].firstChild;
for (var node = nodestory; node; node = node.nextSibling)
{
article.body += node.outerHTML;
}
]]>
</parse_article>
3改channel
但這樣還不能達到我的理想,最好是能變成一個channel
針對我們建的每一個類別,查該網站都有給一個英文代碼,此外每天日期不同時可以取得不同的節目表
於是在channel自己定義了2段tag
<channel>
<name>電視-節目表</name>
<url>http://tv.atmovies.com.tw/tv/attv.asp?action=todaytime&tvfile=</url>
<tvtype>A,T,G,N,D,M,L,C,E,J,S,V,F,R</tvtype>
<tvtypename>綜合,戲劇,綜藝,新聞,數位,西片,國片,卡通,新知,日本,體育,音樂,財經,宗教</tvtypename>
</channel>
請注意上面的url的最後面的tvfile=20070503A等號後面已被我截去
tvtype和tvtypename等下可用split把他切開,再跑迴圈解掉
前面有提到日期,所以我先要抓到今天的日期並轉成字串格式,遇到1-9要補"0"
today = new Date();
var Y = String(today.getFullYear());
...略
var strDay = Y + M + D
上面的strDay的日期已改成像上面的20070503格式
如果想要測試自己寫的對不對,可用alert(strDay)把資訊顯示出來,方便除錯
var t = channel.tvtype.split(",");
var n = channel.tvtypename.split(",");
這2段碼就是準備做迴圈
for(i=0;i<t.length;i++)
{
var href = "http://tv.atmovies.com.tw/tv/attv.asp?action=todaytime&tvfile=" + strDay + t〔i〕;
var article = new Article();
article.id = href + strDay;
article.url = href;
article.header = strDay + "-" + n〔i〕+ "類-" + channel.name;
channel.articles.push( article );
}
注意:
var href的參數就是把做好的字串組起來
article.id是要確保文章不會重複抓取,這邊的寫法如果遇到日期不一樣就會再抓新的文章
我是合併href和日期,很多時候article.id就直接把href傳入
這邊我這樣的寫法其實也可改為article.id = href,因為我們的href的值已隨日期不同會有變化
以上就是我的解說,至於要如何抓分頁,又是另一個課題了!
http://www.phonedaily.com/news/rss/news.xml
對常換手機的人是個好情報的資訊源
附加壓縮檔: 200705/mobile01-f753ff99664f1079039f39618c784a76.zip
內文搜尋
X



























































































