簡體   English   中英

無法追蹤Scrapy中的鏈接

[英]Not able to following links in Scrapy

我現在從Scrapy開始,我從體育頁面(足球運動員的姓名和球隊)中獲取了想要的內容,但是我需要點擊鏈接以搜索更多球隊,每個球隊頁面都有一個鏈接到玩家頁面,網站鏈接的結構為:

團隊頁面: http : //esporte.uol.com.br/futebol/clubes/vitoria/球員頁面: http : //esporte.uol.com.br/futebol/clubes/vitoria/jogadores/

我已經閱讀了一些Scrapy教程,並且我認為我必須遵循鏈接的團隊頁面並且不解析任何內容,而玩家頁面則必須不關注並解析玩家,我不知道我是否我對這個想法是正確的,但在語法上是錯誤的,如果我的追隨想法是錯誤的,歡迎任何幫助。

這是我的代碼:

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 這是一個完整的蜘蛛,可以返回來自不同團隊的球員:

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

從輸出引用:

...
[u'Silva'] [u'Vila Nova-GO']
[u'Luizinho'] [u'Vila Nova-GO']
...
[u'Michel'] [u'Guarani']
[u'Wellyson'] [u'Guarani']
...

這只是您繼續使用Spider的提示,您需要進一步調整Spider:根據您的需求等選擇合適的起始URL。

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM