平台:debian8 + python3.6 + scrapy 1.3.2。
这是一个简单的scrapy脚本,可以下载所有美国股票报价
请在网页上下载7z文件。
用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并告诉我这两个数字。
答案 0 :(得分:1)
在您的档案' urls.csv'有重复的URL。例如https://chart.yahoo.com/table.csv?s=JOBS或https://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")