使用scrapy从值列表抓取网站

2024-10-01 13:37:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个NPI的列表,我想从中找出提供者的名字npidb.org网站 NPI值存储在csv文件中。在

我可以通过在代码中粘贴url来手动完成。但是,如果我有一个NPI列表,我想知道每一个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)

Tags: 代码orgimportselfurl列表responsedef
2条回答

假设您有一个来自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)

好吧,这取决于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
            )

相关问题 更多 >