2017-02-20 32 views
0

平臺:debian8 + python3.6 + scrapy 1.3.2。
下面是一個簡單的scrapy腳本來下載我們所有的股票報價。
請在網頁上下載7z文件。爲什麼下載的文件號碼與我的日誌文件中的網址行數不相等?

all urls to be downloaded

要使用的7z解壓。

7z x urls.7z -o/home 

可以測試示例數據/home/urls.csv。 爲了下面scrapy腳本保存爲/home/quote.py

import scrapy 
import csv 

CONCURRENT_REQUESTS = 3 
CONCURRENT_REQUESTS_PER_SPIDER = 3 
CLOSESPIDER_PAGECOUNT = 100000 
CLOSESPIDER_TIMEOUT = 36000 
DOWNLOAD_DELAY = 10 
RETRY_ENABLED = False 
COOKIES_ENABLED = False 
RETRY_ENABLED = True 
RETRY_TIMES = 1 
COOKIES_ENABLED = False 

downloaded = open('/home/downloaded.csv','w') 

class TestSpider(scrapy.Spider): 
    def __init__(self, *args, **kw): 
     self.timeout = 10 

    name = "quote" 
    allowed_domains = ["chart.yahoo.com"] 
    csvfile = open('/home/urls.csv') 
    reader = csv.reader(csvfile) 
    rows = [row[0] for row in reader] 
    start_urls = rows 

    def parse(self, response): 
     content = response.body 
     target = response.url 
     filename = target.split("=")[1] 
     open('/home/data/'+filename+'.csv', 'wb').write(content) 
     downloaded.write(target+"\n") 

的最後兩行/home/quote.py是很重要的,
開( '/家庭/數據/' +文件名+」 .csv','wb')。寫入(內容)打開文件並將數據保存到文件中。
下面,downloaded.write(target +「\ n」),它是寫一個日誌來描述哪個url被立即下載。

若要執行蜘蛛:

scrapy runspider /home/quote.py 

在我看來,號碼 - 所有下載的文件是等於在/home/downloaded.csv排隊URL的數量。

ls /home/data |wc -l 
6012 
wc /home/downloaded.csv 
6124 

爲什麼這裏的兩個數字不相等?
請在你的plarform上測試並告訴我兩個數字。

+0

請分享一些您的控制檯日誌,尤其是統計數據字典底: 你可以用類似檢查。你會看到Scrapy的下載器返回的不同HTTP狀態代碼的計數器。也許你的一些URL被重定向或者返回一個HTTP 404(並且它們不會被傳遞給你的'parse'回調函數) –

回答

1

在您的文件'urls.csv'中有重複的URL。例如https://chart.yahoo.com/table.csv?s=JOBShttps://chart.yahoo.com/table.csv?s=JRJC。 帶有模式'w'的函數open()會截斷該文件(如果它已經存在),然後重寫它。

if not os.path.exists('/home/data/'+filename+'.csv'): 
     open('/home/data/'+filename+'.csv', 'wb').write(content) 
     downloaded.write(target+"\n") 
    else: 
     downloaded.write(target+" already written \n") 
相關問題