2017-01-18 11 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

NPI хранятся в CSV-файле, который был получен из другого кода. –

+0

Какова структура файла csv? Если у вас есть каждый URL-адрес в виде строки в строке, вы можете написать что-то вроде: open (имя_файла) .read(). Split() и получить список всех строк. –

ответ

0

Предположим, у вас есть список НПИ из CSV-файла, то вы можете просто использовать 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 
      )