2017-01-18 55 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 
      )