我正在尝试从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
当我运行蜘蛛时,它会给我一个缩进错误,或者当我对缩进进行调整时,它只会识别列表中的最后一个域。
有关如何实现这一目标的任何建议都表示赞赏。
答案 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)