我现在从Scrapy开始,我知道了如何从体育页面获取我想要的内容(足球运动员的姓名和球队),但是我需要按照链接搜索更多的球队,每个球队页面都有一个指向球员页面的链接,网站链接的结构是:
团队页面:http://esporte.uol.com.br/futebol/clubes/vitoria/ 玩家页面:http://esporte.uol.com.br/futebol/clubes/vitoria/jogadores/
我读过一些蹩脚的教程,我想团队页面我必须遵循链接,不解析任何东西,球员页面我必须不跟随和解析球员,我不知道我是否正确的想法和错误的语法,如果我的想法是错误的,任何帮助都是欢迎的。在
这是我的代码:
class MoneyballSpider(BaseSpider):
name = "moneyball"
allowed_domains = ["esporte.uol.com.br", "click.uol.com.br", "uol.com.br"]
start_urls = ["http://esporte.uol.com.br/futebol/clubes/vitoria/jogadores/"]
rules = (
Rule(SgmlLinkExtractor(allow=(r'.*futebol/clubes/.*/', ), deny=(r'.*futebol/clubes/.*/jogadores/', )), follow = True),
Rule(SgmlLinkExtractor(allow=(r'.*futebol/clubes/.*/jogadores/', )), callback='parse', follow = True),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
jogadores = hxs.select('//div[@id="jogadores"]/div/ul/li')
items = []
for jogador in jogadores:
item = JogadorItem()
item['nome'] = jogador.select('h5/a/text()').extract()
item['time'] = hxs.select('//div[@class="header clube"]/h1/a/text()').extract()
items.append(item)
print item['nome'], item['time']
return items
首先,由于您需要遵循一个提取链接,所以您需要一个CrawlSpider,而不是一个
BaseSpider
。然后,你需要定义两条规则:一条是针对有回调的玩家,另一条是针对没有回调的团队。另外,您应该从一个包含团队列表的URL开始,比如http://esporte.uol.com.br/futebol。这是一个完整的蜘蛛,它从不同的队伍返回玩家:引用输出:
^{pr2}$这只是提示你继续在蜘蛛上工作,你需要进一步调整蜘蛛:根据你的需要选择一个合适的开始网址等等
希望有帮助。在
相关问题 更多 >
编程相关推荐