2012-11-07 29 views
-1

我有一個像www.harvard.edu, www.berkeley.edu等大學網址列表 我需要在各自的網站中找到cse部門網址我最初設置要做的是爬行通過URL給定的鏈接,並指定深度,說3它會按照鏈接,並嘗試找到cse或計算機或在該頁面上鍊接的鏈接的單詞列表匹配鏈接及其錨文本作爲結果返回到csv文件。 如果沒有鏈接包含cse或這樣的話,它應該返回未找到或類似的東西 想法是將csv文件稍後推送到數據庫。我怎樣才能做到這一點?如何抓取各種網站以使用Python查找特定部門?

+0

你到目前爲止有什麼呢?任何代碼? –

回答

0

這是非常複雜的任務,我建議使用結構像這樣使用數據庫:

TABLE pages (
    `absolute_url` VARCHAR(255) NOT NULL, 
    `visited` TINYINT(1) DEFAULT 0, 
    -- Additional fields 
    UNIQUE KEY (`absolute_url`) 
) 

一點解釋:

  • absolute_url包含完整的URL頁面(與http[s]://開始),並具有獨特的索引放在它上面。通過這種方式,您可以確保最終不會發生遞歸或處理多個鏈接兩次
  • visited通知您網站是否已訪問(和處理)。此字段再次避免雙重探視重要的,讓你優雅地恢復,如果你的程序崩潰(即網絡停機時間)

您可以實現通過CSV對自己的那些事,或關聯數組,但數據庫是最我熟悉的解決方案。

和算法將作爲去:

database.insert('http://www.harvard.edu') 
database.insert('http://www.berkeley.edu') 

# In case of failure you'll start at this point: 
while database.get_count(WHERE visited = 0) < 0: 

    for url in database.get_records(WHERE visited = 0): 
     content = http_client.load(url) 
     time.sleep(5) # You don't want to flood server 

     # Problematic URLs will be parsed later 
     if (not content) or (http_client.is_error): 
      continue; 

     for i in content.get_all_urls(): 
      i = make_absolute(i, url) 

      # Also don't crawl remote sites, images, ... 
      if not is_valid_url(i): 
       continue 
      database.insert(i) 

這是僞代碼,我不會實現它都爲你。

0

爲了解決您的問題,您可以使用scrapy框架。

從scrapy網頁提取:

Scrapy是一個快速的高層次的屏幕抓取和Web爬行框架,用來抓取網站,並從自己的網頁中提取結構化數據。它可用於廣泛的用途,從數據挖掘到監視和自動化測試。