背景信息:我想从ratemyprofessor.com获取数据 - 我的编程经验有限,所以我决定看看是否有预先构建的东西来完成这项任务。
我在这里遇到了这个问题:https://classic.scraperwiki.com/scrapers/ratemyprofessors/
这正是我正在寻找的。 ScraperWiki关闭但是设置将所有内容转移到Morph.io - 我在这里做了:https://morph.io/reddyfire/ratemyprofessors
我的问题:它不起作用。它应该输出一个数据库,为我提供我认为需要的信息。我假设它与它所提供的URL有关:
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 :(得分: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)
它呈现此输出:
博士。 Kimora John Jay学院:整体素质:5.0:平均成绩: 答:乐于助人:5.0:容易:4.6
还有很大的改进空间,但这与我可以得到的伪代码差不多。
在这个示例中,它是一个打印输出的函数,如果要将其添加到列表中,只需添加&#34;返回输出&#34;最后用&#34; listName.append(crawlURL(url))调用函数&#34;
这适用于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)
如果你正在迭代他们的所有数据,你应该考虑不时添加延迟,这样你就不会意外地DDoS。