2015-02-10 72 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) 

如果您是通过所有的数据迭代现在每增加延迟一个例子然后你不会不小心把它们弄干净。