不能在下流链接

2024-09-20 22:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在从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

Tags: brcomhttp链接页面item球员uol
1条回答
网友
1楼 · 发布于 2024-09-20 22:54:37

首先,由于您需要遵循一个提取链接,所以您需要一个CrawlSpider,而不是一个BaseSpider。然后,你需要定义两条规则:一条是针对有回调的玩家,另一条是针对没有回调的团队。另外,您应该从一个包含团队列表的URL开始,比如http://esporte.uol.com.br/futebol。这是一个完整的蜘蛛,它从不同的队伍返回玩家:

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import Rule, CrawlSpider
from scrapy.item import Item, Field
from scrapy.selector import HtmlXPathSelector


class JogadorItem(Item):
    nome = Field()
    time = Field()


class MoneyballSpider(CrawlSpider):
    name = "moneyball"
    allowed_domains = ["esporte.uol.com.br", "click.uol.com.br", "uol.com.br"]
    start_urls = ["http://esporte.uol.com.br/futebol"]

    rules = (Rule(SgmlLinkExtractor(allow=(r'.*futebol/clubes/.*?/jogadores/', )), callback='parse_players', follow=True),
             Rule(SgmlLinkExtractor(allow=(r'.*futebol/clubes/.*', )), follow=True),)

    def parse_players(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

引用输出:

^{pr2}$

这只是提示你继续在蜘蛛上工作,你需要进一步调整蜘蛛:根据你的需要选择一个合适的开始网址等等

希望有帮助。在

相关问题 更多 >

    热门问题