2016-12-07 11 views
1

最近、私はプロジェクトのためにScrapyを試し始めましたが、以前のさまざまな構文(SgmlLinkExtractorなど)と非常に混同されていましたが、どういうわけか私にはわかりやすいコードだと思っていました。ただし、これはWebサイトのすべてのページをトラバースするのではなく、start_urlsページに移動し、出力ファイルを生成しません。誰かが私が行方不明であることを説明できますか?Scrapy基本的なクローラは機能しませんか?

import scrapy 
import csv 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 

class RLSpider(CrawlSpider): 
    name = "RL" 
    allowed_domains='ralphlauren.com/product/' 
    start_urls=[ 
     'http://www.ralphlauren.com/' 
    ] 
    rules = (
     Rule(LinkExtractor(),callback="parse_item",follow=True), 
    ) 

    def parse_item(self, response): 
     name = response.xpath('//h1/text()').extract_first() 
     price = response.xpath('//span[@class="reg-price"]/span/text()').extract_first() 
     image=response.xpath('//input[@name="enh_0"]/@value').extract_first() 
     print("Rules=",rules) 
     tup=(name,price,image) 
     csvF=open('data.csv','w') 
     csvWrite = csv.writer(csvF) 
     csvWrite.writerow(tup) 
     return [] 
    def parse(self,response): 
     pass 

私はここで

はログです/ /製品の下に来て、ウェブサイトからデータを抽出し、すべてのページからcsvファイルに書き込むしようとしている:

2016-12-07 19:46:49 [scrapy] INFO: Scrapy 1.2.2 started (bot: P35Crawler) 
2016-12-07 19:46:49 [scrapy] INFO: Overridden settings: {'BOT_NAME': 'P35Crawler 
', 'NEWSPIDER_MODULE': 'P35Crawler.spiders', 'SPIDER_MODULES': ['P35Crawler.spid 
ers']} 
2016-12-07 19:46:49 [scrapy] INFO: Enabled extensions: 
['scrapy.extensions.logstats.LogStats', 
'scrapy.extensions.telnet.TelnetConsole', 
'scrapy.extensions.corestats.CoreStats'] 
2016-12-07 19:46:50 [scrapy] INFO: Enabled downloader middlewares: 
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 
'scrapy.downloadermiddlewares.retry.RetryMiddleware', 
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 
'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware', 
'scrapy.downloadermiddlewares.stats.DownloaderStats'] 
2016-12-07 19:46:50 [scrapy] INFO: Enabled spider middlewares: 
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 
'scrapy.spidermiddlewares.referer.RefererMiddleware', 
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 
'scrapy.spidermiddlewares.depth.DepthMiddleware'] 
2016-12-07 19:46:50 [scrapy] INFO: Enabled item pipelines: 
[] 
2016-12-07 19:46:50 [scrapy] INFO: Spider opened 
2016-12-07 19:46:50 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 i 
tems (at 0 items/min) 
2016-12-07 19:46:50 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2016-12-07 19:46:51 [scrapy] DEBUG: Redirecting (302) to <GET http://www.ralphla 
uren.com/home/index.jsp?ab=Geo_iIN_rUS_dUS> from <GET http://www.ralphlauren.com 
/> 
2016-12-07 19:46:51 [scrapy] DEBUG: Crawled (200) <GET http://www.ralphlauren.co 
m/home/index.jsp?ab=Geo_iIN_rUS_dUS> (referer: None) 
2016-12-07 19:46:51 [scrapy] INFO: Closing spider (finished) 
2016-12-07 19:46:51 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 497, 
'downloader/request_count': 2, 
'downloader/request_method_count/GET': 2, 
'downloader/response_bytes': 20766, 
'downloader/response_count': 2, 
'downloader/response_status_count/200': 1, 
'downloader/response_status_count/302': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2016, 12, 7, 14, 16, 51, 973406), 
'log_count/DEBUG': 3, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 2, 
'scheduler/dequeued/memory': 2, 
'scheduler/enqueued': 2, 
'scheduler/enqueued/memory': 2, 
'start_time': datetime.datetime(2016, 12, 7, 14, 16, 50, 287464)} 
2016-12-07 19:46:51 [scrapy] INFO: Spider closed (finished) 
+0

あなたのログを調べて、私は 'allowed_domains'のためにURLがフィルタリングされていると仮定します。 – eLRuLL

+0

@eLRuLLこんにちは、返信いただきありがとうございます。ログを投稿しました。 allowed_domainsをコメントアウトしようとしましたが、まだ動作しませんでした。 –

答えて

0

あなたはshouldn空のものでparse()メソッドを上書きしません。だから、そのメソッドの宣言を削除してください。これが役に立ったら教えてください。 scrapyJSを解析する上であなたのコメントについては

UPDATE

、それを行うにはさまざまな方法があります。 JSを解析するにはブラウザが必要です。 Firefoxを試して、それをSeleniumで制御したいとします。

私がthis answerについて説明しているように、IMOはダウンロードハンドラを実装する最も良い方法です。そうでない場合はhereのようにdownloader middlewareを実装できます。 middlewareあなたがFirefoxでの作業の基本的なスクリプトを取得した後、あなたはちょうど変更することにより、PhantomJSに切り替えることができますなど、

download handlerがデフォルトcacheを使用することができるようになると、handlerに比べていくつかの欠点を持っているretry数行。 PhantomJSはヘッドレスブラウザです。つまり、すべてのブラウザインターフェイスを読み込む必要はありません。だから、はるかに高速です。

他のソリューションは、SplashDockerを使用して含まれていますが、単にブラウザを制御する​​実行する必要があるように私は、この行き過ぎを考慮してしまいました。

これをまとめると、とPhantomJSを使用するdownload handlerを実装するのが最善の解決策です。

+0

こんにちは、ありがとうございましたが、現在はallowed_domainsがralphlauren.comに限定されているため、すべてがフィルタリングされ、最初のウェブサイトをクロールしています。 –

+0

私は必要なリンクのほとんどがウェブサイトのJavaScript部分にあることに気付きましたが、どうすればそれらをクロールできますか? –

関連する問題