2016-12-05 7 views
0

私は、scrapyを使用してページからすべてのリンクをクロールしようとしています。クロール中にScrapyを使用して出力を書き込もう

ターミナルでこれをこのように実行すると、scrapy crawl crawl1 -o items.csv -t csvです。私はそれがクロールし、次のようないくつかのリンクを取得することがわかりますが、言及した出力ファイルには何も書き込まれません。

2016-12-05 16:17:33 [scrapy] DEBUG: Crawled (200) <GET http://www.abof.com/men/new-in/footwear> (referer: http://www.abof.com/) 
2016-12-05 16:17:33 [scrapy] DEBUG: Crawled (200) <GET http://www.abof.com/> (referer: http://www.abof.com/) 
2016-12-05 16:17:33 [scrapy] DEBUG: Crawled (200) <GET http://www.abof.com/skult> (referer: http://www.abof.com/) 

私もこれを試しましたScrapy does not write data to a fileです。

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from crawl.items import CrawlItem 
from scrapy.contrib.loader import XPathItemLoader 
from scrapy.contrib.loader.processor import TakeFirst 


class CrawlLoader(XPathItemLoader): 
    default_output_processor = TakeFirst() 


class MySpider(CrawlSpider): 
    name = "crawl1" 
    allowed_domains = ["www.abof.com"] 
    start_urls = ["http://www.abof.com/"] 
    #follow= True 
    rules = (Rule(SgmlLinkExtractor(allow=()), callback="parse_items",),) 

    def parse_items(self, response): 
     hxs = HtmlXPathSelector(response) 
     titles = hxs.xpath('//span[@class="pl"]') 
     items = [] 
     l = CrawlLoader(CrawlItem(), hxs) 
     for titles in titles: 
      item = CrawlItem() 
      # l.add_value("url",response.url) 
      # l.add_xpath("title",titles.xpath("a/text()").extract()) 
      # l.add_xpath("link",titles.xpath("a/@href").extract())) 

      item["title"] = titles.xpath("a/text()").extract() 
      item["url"] = titles.xpath("a/@href").extract() 
      items.append(item) 
     return(items) 
     # return l.load_item() 

items.py

import scrapy 

class CrawlItem(scrapy.Item): 
    # define the fields for your item here like:                                        
    # name = scrapy.Field()                                             
    title = scrapy.Field() 
    url = scrapy.Field() 
    pass 

すべてのヘルプは高く評価されます。

+0

入手したアイテムを印刷しようとしましたか? ( 'for'ループ内に) – eLRuLL

答えて

0

これは、parse_items関数を変更することでこのように機能しました。 javascript内の画像やその他のデータを解析しようとしています。

class CrawlLoader(XPathItemLoader): 
    default_output_processor = TakeFirst() 


class MySpider(CrawlSpider): 
    name = "crawl1" 
    allowed_domains = ["www.abof.com"] 
    start_urls = ["http://www.abof.com/"] 
    rules = (Rule(SgmlLinkExtractor(allow=()), callback="parse_items",follow= True),) 

    def parse_items(self, response): 
     href = CrawlItem() 
     href['url'] = response.url 
     href["title"] = response.xpath("//title/text()").extract() 
     return href 
関連する問題