Scrapy遍历启动URL和域

时间:2018-02-22 17:13:54

标签: python-3.x pandas scrapy scrapy-spider

我正在尝试从csv中读取网址和域列表,并让Scrapy蜘蛛遍历域列表并启动网址,目标是将该域中的所有网址都导出到csv文件中我的管道。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from NONPROF.items import NonprofItem
from scrapy.http import Request
import pandas as pd


file_path = 'C:/csv'
open_list = pd.read_csv(file_path)
urlorgs = open_list.http.tolist()

open_list2 = pd.read_csv(file_path)
domainorgs = open_list2.domain.tolist()



class Nonprof(CrawlSpider):
        name = "responselist"
    for domain in domainorgs:
        allowed_domains = [domain]
    for url in urlorgs:
        start_urls = [url]

        rules = [
            Rule(LinkExtractor(
                allow=['.*']),
                 callback='parse_item',
                 follow=True)
            ]

        def parse_item (self, response):
            item = NonprofItem()
            item['responseurl'] = response.url
            yield item

当我运行蜘蛛时,它会给我一个缩进错误,或者当我对缩进进行调整时,它只会识别列表中的最后一个域。

有关如何实现这一目标的任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:2)

你粘贴的这段代码有可怕的缩进我翻译抱怨并不感到惊讶。但很可能这是你的问题:

which

它会创建一个只包含一个域的新列表,并将其分配给allowed_domains = [domain] 。因此,最后一个域会覆盖之前保存的所有内容。通过执行以下操作来解决此问题:

allowed_domains

甚至喜欢(没有循环):

allowed_domains = []
for domain in domainorgs:
    allowed_domains += [domain]

答案 1 :(得分:0)

修复你的缩进并试试这个:

for domain in domainorgs:
    allowed_domains.append(domain)
for url in urlorgs:
    start_urls.append(url)
相关问题