2017-01-18 42 views
0

我有一個NPI列表,我想從npidb.org中提取提供者的名稱 NPI值存儲在csv文件中。使用scrapy從值列表抓取網站

我能夠通過在代碼中粘貼URL來手動完成。然而,如果我有一份我希望提供商名稱的NPI列表,我無法弄清楚如何做到這一點。

這裏是我當前的代碼:

import scrapy 
from scrapy.spider import BaseSpider 



class MySpider(BaseSpider): 
    name = "npidb" 

    def start_requests(self): 
     urls = [ 

      'https://npidb.org/npi-lookup/?npi=1366425381', 
      'https://npidb.org/npi-lookup/?npi=1902873227', 
     ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     page = response.url.split("/")[-1] 
     filename = 'npidb-%s.html' % page 
     with open(filename, 'wb') as f: 
      f.write(response.body) 
     self.log('Saved file %s' % filename) 
+0

你想從命令行提供所有'npi'值?文本文件? – eLRuLL

+0

NPIs存儲在從另一個代碼派生的csv文件中。 –

+0

csv文件的結構是什麼?如果每條URL都作爲每行的條目,則可以編寫如下內容:open(file_name).read()。split()並獲取所有行的列表。 –

回答

0

假設你從CSV文件中有NPI的列表,那麼你可以簡單地使用format更改網站地址如下(我還添加了部分獲取列表從csv文件。如果你擁有了它已經,你可以省略的部分):

def start_requests(self): 
     # get npis from csv file 
     npis = [] 
     with open('test.csv', 'r') as f: 
      for line in f.readlines(): 
       l = line.strip() 
       npis.append((l)) 
     # generate the list of address depending on npi 
     start_urls = [] 
     for npi in npis: 
      start_urls.append('https://npidb.org/npi-lookup/?npi={}'.format(npi)) 
     for url in start_urls: 
      yield scrapy.Request(url=url, callback=self.parse) 
0

嗯,這取決於你的csv文件的結構,但如果它包含在單獨的行內的非營利機構,你可以做些什麼像

def start_requests(self): 
    with open('npis.csv') as f: 
     for line in f: 
      yield scrapy.Request(
       url='https://npidb.org/npi-lookup/?npi={}'.format(line.strip()), 
       callback=self.parse 
      )