我正试图从https://www.oddsportal.com/中删除NBA的历史数据。
使用下面的代码,回调不会执行。但是,当我将oddsportal.com
更改为nba.com
时,我没有遇到任何问题。
我不知道这是为什么。建议?
import scrapy
from scrapy.loader import ItemLoader
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from nba_scrapper.items import NbaScrapperItem
import re
class GetGameSpider(CrawlSpider):
name = 'get_game_spider'
allowed_domains = ['oddsportal.com']
start_urls = ['https://www.oddsportal.com']
rules = (
Rule(callback='parse_games',follow=True),
)
def parse_games(self, response):
l = ItemLoader(item=NbaScrapperItem(), selector=response)
this_item = l.load_item()
yield this_item
1条答案
按热度按时间yzckvree1#
Scrapy首先在spider中查找
start_requests
方法,如果不存在这样的方法,则查找start_requests
,并开始使用默认的解析方法为列表中的每个url创建请求对象,因为您的spider使用的是start_urls
列表,所以scrapy会自动假定第一个回调函数应该是parse
方法。因此,当它发现没有时,它就放弃了。有两个简单的补救办法。
1.将
parse_games
方法的名称更改为parse
1.实现
start_requests
方法并显式指示每个请求使用parse_games
方法作为回调。例如: