为什么下载的文件号在我的日志文件中不是相同数量的url'

时间:2017-02-20 14:15:36

标签: python scrapy

平台: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中的最后两行很重要,
打开(' / home / data /' + filename +' .csv',' wb')。write(content) to打开文件并将数据保存到文件中 以下是 downloaded.write(target +" \ n"),它是写一个日志来描述哪个网址是立即下载的。

用:

执行蜘蛛
scrapy runspider  /home/quote.py

在我看来,数字 - 所有下载的文件都等于/home/downloaded.csv中网址的行号。

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

为什么这里的两个数字不相等? 请测试你的plarform并告诉我这两个数字。

1 个答案:

答案 0 :(得分:1)

在您的档案' urls.csv'有重复的URL。例如https://chart.yahoo.com/table.csv?s=JOBShttps://chart.yahoo.com/table.csv?s=JRJC。 函数open()with mode' w'截断文件(如果已存在),然后重写它。 您可以使用以下内容进行检查:

    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")