Scrapy爬取transfermarkt.nl显示0页但元素存在的问题排查
解决Scrapy爬虫显示“Crawled 0 pages”的问题
你遇到的核心问题以及代码里的错误点如下:
1. 初始URL列表变量名拼写错误
你在爬虫类中定义的是starts_urls,但Scrapy框架要求的正确变量名是start_urls(少一个字母t)。Scrapy会自动读取start_urls中的URL生成初始请求,变量名错误会导致框架找不到要爬取的初始地址,直接出现“Crawled 0 pages”的结果。
2. 遍历元素的方法错误
你的parse方法中使用response.css('div.grid-view table.items tbody tr').get(),get()只会返回第一个匹配的<tr>元素,无法遍历所有球员行。应该改用getall()(或者直接遍历css选择器返回的可迭代对象)来获取所有符合条件的元素。
修正后的完整代码
import scrapy class TransferMarketScraper(scrapy.Spider): name = 'transfermarket' start_urls = ['https://www.transfermarkt.nl/heracles-almelo/kader/verein/1304/saison_id/2022/plus/1'] def parse(self, response): # 直接遍历css选择器返回的可迭代对象,等价于getall() for player in response.css('div.grid-view table.items tbody tr'): try: player_number = int( player.css('div.rn_nummer::text').get().strip() ) except ValueError: player_number = 'NA' except AttributeError: continue yield {'player_number': player_number}
注:你当前的Scrapy配置(USER_AGENT、HTTPERROR_ALLOWED_CODES等)是有效的,因为Scrapy Shell能正常获取响应,问题完全出在爬虫代码的拼写和逻辑错误上。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

