2017-01-18 15 views
0

Ich habe eine Liste von NPIs, die ich die Namen der Anbieter für kratzen wollen von npidb.org Die NPI-Werte sind in einer CSV-Datei gespeichert.Crawl Website von der Liste der Werte mit scrapy

Ich kann es manuell tun, indem Sie die URLs im Code einfügen. Ich bin jedoch nicht in der Lage herauszufinden, wie es geht, wenn ich eine Liste von NPIs habe, für die ich den Namen des Anbieters haben möchte.

Hier ist mein aktueller Code ist:

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

Sie möchten alle "npi" -Werte über eine Befehlszeile bereitstellen? Textdatei? – eLRuLL

+0

Die NPIs werden in einer CSV-Datei gespeichert, die von einem anderen Code abgeleitet wurde. –

+0

Wie ist die Struktur der CSV-Datei? Wenn Sie jede URL als Eintrag pro Zeile hätten, könnten Sie etwas schreiben wie: open (file_name) .read(). Split() und eine Liste aller Zeilen erhalten. –

Antwort

0

Angenommen, Sie eine Liste von NPI aus CSV-Datei haben, dann einfach format verwenden Sie können die Website-Adresse wie folgt (I auch noch die Stückliste bekommen zu ändern .

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

Nun, es hängt von der Struktur Ihrer cSV-Datei, aber wenn es um die VoG in separaten Zeilen enthält, können Sie etwas tun: aus cSV-Datei wenn Sie es bereits haben, können Sie diesen Teil) auslassen wie

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 
      ) 
Verwandte Themen