0

我有一个 NPI 列表,我想从 npidb.org 抓取提供者的名称 NPI 值存储在 csv 文件中。

我可以通过在代码中粘贴 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)
4

2 回答 2

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)
于 2017-01-18T19:35:13.293 回答
0

好吧,这取决于您的 csv 文件的结构,但如果它在单独的行中包含 npi,您可以执行类似的操作

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
            )
于 2017-01-18T20:50:11.083 回答