我的大学很快就要开始了,所以我决定为“给我的教授打分”建立一个网络爬虫,以帮助我找到学校里评价最高的老师。刮刀效果很好……但仅适用于第二页!无论我尝试什么,我都无法让它正常工作。
这是我从中抓取的 URL:http ://www.ratemyprofessors.com/SelectTeacher.jsp?sid=2311&pageNo=3 (不是我实际的大学,但具有相同类型的 URL 结构)
这是我的蜘蛛:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from rmp.items import RmpItem
class MySpider(CrawlSpider):
name = "rmp"
allowed_domains = ["ratemyprofessors.com"]
start_urls = ["http://www.ratemyprofessors.com/SelectTeacher.jsp?sid=2311"]
rules = (Rule(SgmlLinkExtractor(allow=('&pageNo=\d',), restrict_xpaths=('//a[@id="next"]',)), callback='parser', follow=True),)
def parser(self, response):
hxs = HtmlXPathSelector(response)
html = hxs.select("//div[@class='entry odd vertical-center'] | // div[@class='entry even vertical-center']")
profs = []
for line in html:
prof = RmpItem()
prof["name"] = line.select("div[@class='profName']/a/text()").extract()
prof["dept"] = line.select("div[@class='profDept']/text()").extract()
prof["ratings"] = line.select("div[@class='profRatings']/ text()").extract()
prof["avg"] = line.select("div[@class='profAvg']/text()").extract()
profs.append(prof)
我尝试过的一些事情包括删除 restrict_xpaths 关键字参数(导致刮板在第一个、最后一个、下一个和后退按钮之后,因为它们都共享 &pageNo=\d URL 结构)并更改允许关键字的正则表达式论据(结果没有变化)。
有人有什么建议吗?这似乎是一个简单的问题,但我已经花了一个半小时试图弄清楚!任何帮助将不胜感激。