Я пытаюсь проанализировать данные только из столбцов item & Skill Cap в HTML-таблице здесь: http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html
item
Skill Cap
При разборе я сталкиваюсь с проблемами выравнивания, когда мой скрипт анализирует из других столбцов.
import scrapy class parser(scrapy.Spider): name = "recipe_table" start_urls = ['http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html'] def parse(self, response): for row in response.xpath('//*[@class="datatable sortable"]//tr'): data = row.xpath('td//text()').extract() if not data: # skip empty row continue yield { 'name': data[0], 'cap': data[1], # 'misc': data[2] }
Результаты: scrapy runspider cap.py -t json Когда он достигает 3-й строки, данные из непреднамеренного столбца анализируются. Я не уверен, что происходит с выбором.
scrapy runspider cap.py -t json
2019-05-09 19:41:28 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html> (referer: None) 2019-05-09 19:41:28 [scrapy.core.scraper] DEBUG: Scraped from <200 http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html> {'item_name': u'Banquet Set', 'cap': u'0'} 2019-05-09 19:41:28 [scrapy.core.scraper] DEBUG: Scraped from <200 http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html> {'item_name': u'Banquet Table', 'cap': u'0'} 2019-05-09 19:41:28 [scrapy.core.scraper] DEBUG: Scraped from <200 http://ffxi.allakhazam.com/dyn/guilds/Alchemy.html> {'item_name': u'Cermet Kilij', 'cap': u'Cermet Kilij +1'}
А как насчет явно установленного исходного столбца с XPath:
for row in response.xpath('//*[@class="datatable sortable"]//tr'): yield { 'name': row.xpath('./td[1]/text()').extract_first(), 'cap': row.xpath('./td[3]/text()').extract_first(), # 'misc': etc. }