[英]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.