2010-01-14 43 views
-3

喜,所以我需要檢索的URL上一個學期,我在nytimes.com搜索最多解析網站和獲取信息,我需要

所以,如果我搜索蘋果的第一篇文章。此鏈接將返回結果

http://query.nytimes.com/search/sitesearch?query=Apple&srchst=cse

而你只是你正在尋找一詞取代蘋果。

如果你點擊該鏈接,你會看到紐約時報問你,如果你的意思是蘋果公司

我想要得到此鏈接的URL,然後轉到它。

然後,你只會得到很多的信息,蘋果公司

如果向下滾動,你會看到與蘋果公司的文章。

所以我最終想要的是本頁第一篇文章的URL。

所以我真的不知道如何去做這件事。我是否使用Java,或者我使用了什麼?任何幫助將不勝感激,我會在稍後給予獎勵,但我需要儘快解答。

謝謝

編輯:我們可以在Java中做到這一點嗎?

回答

0

你當然可以用Java來做到這一點。看看HttpURLConnection類。基本上,你給它一個URL,調用connect函數,然後你返回一個包含頁面內容的輸入流,即HTML文本。然後你可以處理它並解析出你想要的任何信息。

您在描述的項目中遇到兩個挑戰。第一個,也許真的是更小的挑戰,是弄清楚如何連接到網頁並獲得程序中的文本的機制。第二個也許是更大的挑戰將是確切地找出如何從該文本中提取您想要的信息。我不清楚你的要求的細節,但你將不得不通過大量的文本來找出你要找的東西。在沒有真正看過紐約時報網站的時候,我確定它有各種各樣的裝飾品,比如漂亮的圖片,公司的標誌和標題等等,然後會有菜單和廣告以及各種各樣的東西。我真誠地懷疑,紐約時報或幾乎任何其他商業網站將返回一個搜索頁面,只包含您感興趣的文章的鏈接。不知何故,您的程序必須弄清楚第一個鏈接是「訂閱在線」頁面,第二個是廣告,第三個是客戶服務,第四個和第五個是額外的廣告,第六個是到首頁等等,直到你最終得到你實際上的一個感興趣。您如何識別有趣的鏈接?可能有標題或格式可以讓人們辨認,但是你用很多直覺來篩選出在程序中難以複製的混亂。

祝你好運!

1

您可以使用Python與標準urllib模塊來獲取頁面和偉大的HTML解析器BeautifulSoup以從頁面中獲取所需的信息。

documentation of BeautifulSoup,下面是抓取網頁,並從中提取一些信息示例代碼:

import urllib2 
from BeautifulSoup import BeautifulSoup 

page = urllib2.urlopen("http://www.icc-ccs.org/prc/piracyreport.php") 
soup = BeautifulSoup(page) 
for incident in soup('td', width="90%"): 
    where, linebreak, what = incident.contents[:3] 
    print where.strip() 
    print what.strip() 
    print 

this is的主題一個很好的和詳細的文章。

+0

是否有Java解決方案? – SuperString

+1

我確定有,但對於像這樣的任務Python更可取。您將有一個可行的解決方案,運行時間要短得多,而且修改也會更容易 –

0

您可以在C#中使用HTML Agility Pack 或使用LINQ to XML在網站有效的情況下使用XHTML 編輯:這是無效的XHTML;我檢查了。

以下(測試)的代碼會得到第一個搜索結果的URL:

var doc = new HtmlWeb().Load(@"http://query.nytimes.com/search/sitesearch?query=Apple&srchst=cse"); 
var url = HtmlEntity.DeEntitize(doc.DocumentNode.Descendants("ul") 
           .First(ul => ul.Attributes["class"] != null 
              && ul.Attributes["class"].Value == "results") 
           .Descendants("a") 
           .First() 
           .Attributes["href"].Value); 

需要注意的是,如果他們的網站的變化,這種代碼可能會停止工作。

+0

我更喜歡使用Java,C++或Python,因爲這些是我最熟悉的語言。 – SuperString

+1

你可能對他們很熟悉,但我不是。 – SLaks