2015-02-10 28 views
1

背景信息:我期待從ratemyprofessor.com提取數據 - 我的編程經驗有限,因此我決定查看是否預先構建了一些內容來完成此任務。從ratemyprofessor.com提取數據

我碰到這個位置:https://classic.scraperwiki.com/scrapers/ratemyprofessors/

這正是我要找的。 ScraperWiki倒閉,但有其設置的一切轉移到Morph.io - 我在這裏做:https://morph.io/reddyfire/ratemyprofessors

我的問題:它不工作。它應該輸出一個數據庫,給我的信息我已經確定需要。我假設它有事情做與它的距離拉的網址:

response = scraperwiki.scrape("http://www.ratemyprofessors.com/SelectTeacher.jsp?sid=%s&pageNo=%s" % (sid,str(i))) 

但我不知道如果這是正確的。我感覺很受挫,但我想繼續尋求解決方案。

我需要的是:我希望獲得每個學院教師的姓名,部門,總評分,總體質量,輕鬆度和熱度評級。以下是一些所需格式的示例輸出:

{"953":("Stanford",32),"799":("Rice",17),"780":("Princeton",16)} 
+0

你想要什麼數據?你的意思是「不起作用」?您越具體,我們可以幫助您更好地分離您的問題。 – ahjohnston25 2015-02-10 04:29:10

+0

對不起,我會編輯我的帖子,以更具體的以及張貼在這裏。我希望從每個搜索到的學校的每位教師處獲得以下信息:[「姓名」,「部門」,「總評分」,「整體質量」,「輕鬆」,「熱門」] – Srswnsn 2015-02-10 04:35:34

+0

好的,這是第一個位。您正在使用預製解決方案。什麼部分不適合你? – ahjohnston25 2015-02-10 04:39:36

回答

0

我測試過爲您做一個簡化的刮板。請注意,它不是pythonic(即不美觀或快速),但作爲一個起點,它的工作原理。

__author__ = 'Victor' 
import urllib 
import re 
url = 'http://www.ratemyprofessors.com/ShowRatings.jsp?tid=306975' 

def crawlURL(addedURL): 
    url = addedURL 
    html = urllib.urlopen(url).read() 

    teacherData = re.findall(r'\">(.*?)</',html) 

    output = '' 
    addStuff = 0 
    for x in xrange(len(teacherData)): 
     if teacherData[x] == 'Submit a Correction': 
      output = 'professor: ' 
      for y in xrange(4): 
       output += teacherData[x-8+y] + ' ' 
      addStuff = 1 
     elif teacherData[x] == 'Helpfulness' and addStuff == 1: 
      output += ': Overall quality: '+ str(teacherData[x-2]) + ': Average grade: ' + str(teacherData[x-1]) + ': Helpfulness: ' + teacherData[x+1] 
     elif teacherData[x] == 'Easiness' and addStuff == 1: 
      output += ': Easiness: ' + str(teacherData[x+1]) 
      addStuff = 0 
      break 
    print output 
crawlURL(url) 

它呈現這樣的輸出:

日語;夏威夷語約翰·傑伊學院博士:總體質量:5.0:平均等級: 樂於助人:5.0:容易度:4.6

有有很大的改進空間,但這與我能得到的僞代碼差不多。

在這個例子中,它是一個打印輸出的函數,如果你想把它添加到列表中,只需在最後添加一個「返回輸出」並用「listName.append(crawlURL(url))來調用函數「

這就是Python 2.7

是的,它不得到你所要求的確切數據。它只是打開你的門;)

編輯: 下面是你應該考慮循環如何請求

def crawlURL(addesURL): 
    ... 
    return output 

baseURL = 'http://www.ratemyprofessors.com/ShowRatings.jsp?tid=306' 
for x in xrange(50): 
    url = baseURL + str(x+110) 
    if crawlURL(url) != '': print crawlURL(url) 

如果您是通過所有的數據迭代現在每增加延遲一個例子然後你不會不小心把它們弄乾淨。