我一直试图从网站上抓取数据:http://uk.ratemyteachers.com/。我想从一些我不知道网站名称的老师那里获取信息。
每位教师在网站上都有一个遵循常规模式的页面。例如,这位老师Lois Bank存储在:http://uk.ratemyteachers.com/lois-banks/184618-t。所以模式是老师的名字,斜线,数字,破折号。
在我尝试使用CrawlSpider使用正则表达式从主页抓取之前,但由于我尝试访问的页面未链接到主页,因此无法解决问题,访问它们的唯一方法是在搜索框中搜索教师的姓名。
我试着编写下面的蜘蛛,但它没有用完:
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.loader import XPathItemLoader
from scrapy.http import Request
from rmt.items import RmtItem_2
class RmtSpider(CrawlSpider):
name = 'rmtspider_4'
allowed_domains = ['uk.ratemyteachers.com']
start_urls = ['http://uk.ratemyteachers.com/[-a-z0-9/]-t+$',]
def parse_category(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//div[@class="main-c"]'
sub_selectors = main_selector.select(xpath)
for selector in sub_selectors:
item = RmtItem_2()
l = XPathItemLoader(item=item, selector=selector)
l.add_value ('url', response.url)
l.add_xpath('name', '//div[@class="breadcrumb"]/a[5]/text()')
l.add_xpath('school', '//div[@class="breadcrumb"]/a[3]/text()')
l.add_xpath('department', '//div[@class="breadcrumb"]/a[4]/text()')
l.add_xpath('total_ratings', '////div[@class="desc-details"]/span/text()')
l.add_xpath('location', '//div[@class="breadcrumb"]/a[2]/text()')
yield l.load_item()
如果有人能帮我解决这个问题,我将不胜感激。我提前谢谢你。
答案 0 :(得分:1)
答案 1 :(得分:1)
为什么不从sitemap开始抓取并通过这些页面向教师开始?
答案 2 :(得分:1)
正如人们所说,在应用正则表达式过滤掉您需要的教师之前,您需要获取链接。通过蛮力获取链接是荒谬的。
因此,您需要使用搜索表单来获取教师的链接。使用这样的东西:
class MySpider(BaseSpider):
def start_requests(self): # http://doc.scrapy.org/topics/spiders.html#scrapy.spider.BaseSpider.start_requests
return [FormRequest("http://uk.ratemyteachers.com/SelectSchoolSearch.php",
formdata={'user': 'john', 'pass': 'secret'}, # put your parameters here - use FireBug to see the post data you need
callback=self.parse_search)]
def parse_search(self, response):
...
正如Philip Southam所说 - 解析所有学校,获取所有教师的链接并过滤掉你需要的那些。
我想你需要更多的例子,但你必须自己做 - 阅读文档和scrapy来源。
答案 3 :(得分:0)
我听说过很多关于HTML Agility Pack的好东西(尽管我没有使用它):