2017-10-19 11 views
0

私は現在、私の最初の治療プロジェクトを構築中です。現在、私はHTMLテーブルからデータを抽出しようとしています。ここに私のクロールスパイダーは、これまでのところです:Scrapy Csv exportにはすべてのデータが1つのセルに抽出されています

import scrapy 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from digikey.items import DigikeyItem 
from scrapy.selector import Selector 

class DigikeySpider(CrawlSpider): 
name = 'digikey' 
allowed_domains = ['digikey.com'] 
start_urls = ['https://www.digikey.com/products/en/capacitors/aluminum-electrolytic-capacitors/58/page/3?stock=1'] 
['www.digikey.com/products/en/capacitors/aluminum-electrolytic-capacitors/58/page/4?stock=1'] 

rules = (
    # Extract links matching 'category.php' (but not matching 'subsection.php') 
    # and follow links from them (since no callback means follow=True by default). 
    Rule(LinkExtractor(allow=('/products/en/capacitors/aluminum-electrolytic-capacitors/58/page/3?stock=1',), deny=('subsection\.php',))), 
) 

def parse_item(self, response): 
    item = DigikeyItem() 
    item['partnumber'] = response.xpath('//td[@class="tr-mfgPartNumber"]/a/span[@itemprop="name"]/text()').extract() 
    item['manufacturer'] = response.xpath('///td[6]/span/a/span/text()').extract() 
    item['description'] = response.xpath('//td[@class="tr-description"]/text()').extract() 
    item['quanity'] = response.xpath('//td[@class="tr-qtyAvailable ptable-param"]//text()').extract() 
    item['price'] = response.xpath('//td[@class="tr-unitPrice ptable-param"]/text()').extract() 
    item['minimumquanity'] = response.xpath('//td[@class="tr-minQty ptable-param"]/text()').extract() 
    yield item 

parse_start_url = parse_item 

それはwww.digikey.com/products/en/capacitors/aluminum-electrolytic-capacitors/58/page/4?stock=1でテーブルを掻き取ります。その後、すべてのデータをdigikey.csvファイルにエクスポートしますが、すべてのデータは1つのセルに格納されます。 Csv file with scraped data in one cell

setting.py

BOT_NAME = 'digikey' 

SPIDER_MODULES = ['digikey.spiders'] 
NEWSPIDER_MODULE = 'digikey.spiders' 


# Crawl responsibly by identifying yourself (and your website) on the user-agent 
USER_AGENT = 'digikey ("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36")' 

# Obey robots.txt rules 
ROBOTSTXT_OBEY = False 

私は情報がその部品番号に関連付けられた対応する情報を一度に1行で掻き取りたいです。すべてのヘルプははるかに高く評価されて

import scrapy 


class DigikeyItem(scrapy.Item): 
    partnumber = scrapy.Field() 
    manufacturer = scrapy.Field() 
    description = scrapy.Field() 
    quanity= scrapy.Field() 
    minimumquanity = scrapy.Field() 
    price = scrapy.Field() 
    pass 

items.py

答えて

0

問題は、単一項目の各フィールドに列全体を読み込んでいることです。私はあなたが欲しいものは次のようなものだと感じています:

私は少しセレクタを短くしようとしました。 btw extract_firststripの反復を私がここで(テスト目的のためだけに)使用し、Item Loadersを使用することを検討してください。最初のものを取り出し、希望の出力を取り除く方が簡単です。

関連する問題