【发布时间】:2018-04-23 03:44:13
【问题描述】:
我使用 round-col 作为列表长度,因为该列中总是有数据告诉我表格的大小。 我正在将数据抓取到 csv,因此所有字段都必须对应,但我面临的问题是当循环命中“无数据”时,列表索引超出范围或“TypeError:“NoneType”对象不可子脚本
from scrapy.selector import Selector
from scrapy.spiders import Spider
from bigcrawler.items import BigcrawlerItem
class CrawlbotSpider(Spider):
name = 'bigcrawler'
allowed_domains = ['www.matchstat.com']
start_urls = ['https://matchstat.com/tennis/all-upcoming-matches']
custom_settings = {
'FEED_FORMAT': 'csv' ,
'FEED_URI': 'test.csv'
}
def parse(self ,response):
hxs = Selector(response)
item = BigcrawlerItem()
round_col = hxs.xpath(".//tr[contains(@class, 'match')]/td[contains(@class, 'round')]/text()").extract()
event_col = hxs.xpath(".//tr[contains(@class, 'match')]/td[contains(@class, 'event-name')]/a/text()").extract()
player1_col = hxs.xpath(".//tr[contains(@class, 'match')]/td[contains(@class, 'player-name')][1]/a/text()").extract()
player2_col = hxs.xpath(".//tr[contains(@class, 'match')]/td[contains(@class, 'player-name')][2]/a/text()").extract()
odds1_col = hxs.xpath(".//tr[contains(@class, 'match highlight')]/td[contains(@class, 'odds-td odds-0')]/a[contains(@class, 'btn btn-default virtual btn-xs btn-outcome odds')][1]/text()").extract_first()
odds2_col = hxs.xpath( ".//tr[contains(@class, 'match highlight')]/td[contains(@class, 'odds-td odds-1')]/a[contains(@class, 'btn btn-default virtual btn-xs btn-outcome odds')][2]/text()").extract_first()
h2h_col = hxs.xpath(".//tr[contains(@class, 'match')]/td[contains(@class, 'h2h')]/a[contains(@class, 'h2h')]/text()").extract_first()
for x in range(0,len(round_col)):
item['round'] = round_col[x].strip()
item['event1'] = event_col[x].strip()
item['player_1'] = player1_col[x].strip()
item['player_2'] = player2_col[x].strip()
item['player_1_odds'] = odds1_col[x].strip()
item['player_2_odds'] = odds2_col[x].strip()
item['h_2_h'] = h2h_col[x].strip()
yield item
如果列表改变形状,数据是无用的,我如何修改循环以在没有命中任何元素时插入“None”以保持 len 循环处于活动状态?
或者我可以采取其他方法吗? 谢谢。
【问题讨论】:
-
一个选项是将其写为
x < len(odds_1_col) and odds1_col[x].strip() or None,但我认为这应该被重写......可能作为一个类。
标签: python pandas loops csv scrapy