Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 刮擦错误:无法';t bind:24:打开的文件太多_Python_Web Scraping_Scrapy - Fatal编程技术网

Python 刮擦错误:无法';t bind:24:打开的文件太多

Python 刮擦错误:无法';t bind:24:打开的文件太多,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我在一个域列表上运行Scrapy,很多页面都出现了这个错误: 无法绑定:24:打开的文件太多。 我没有在我的linux机器上得到这个错误,但我现在在我的Mac上得到它。我不确定这是否与在Sierra上运行有关,或者我是否遗漏了一个粗糙的配置。我选中了ulimit,它返回unlimited,所以我认为不是这样 如果是关于我的蜘蛛,这里是: class JakeSpider(CrawlSpider): name = 'jake' allowed_domains = allowedDo

我在一个域列表上运行Scrapy,很多页面都出现了这个错误:
无法绑定:24:打开的文件太多。

我没有在我的linux机器上得到这个错误,但我现在在我的Mac上得到它。我不确定这是否与在Sierra上运行有关,或者我是否遗漏了一个粗糙的配置。我选中了
ulimit
,它返回
unlimited
,所以我认为不是这样

如果是关于我的蜘蛛,这里是:

class JakeSpider(CrawlSpider):
    name = 'jake'
    allowed_domains = allowedDomains
    start_urls = startUrls
    rules = (
        Rule(LinkExtractor(), callback='parse_page', follow=True),
    )


    def parse_page(self, response):
        page = response.url
        domain = urlparse(page).netloc
        domain = domain.replace('www.','')
        #print(domain, 'is domain and page is', page)
        linksToGet = getHotelUrlsForDomain(domain)
        #if(len(linksToGet) == 0):
        #    print('\n ... links to get was zero \n')
        #print('linksToGet = ', linksToGet)
        links = response.xpath('//a/@href').extract()
        for link in links:
            if link in linksToGet:
                print('\n\n\n   found one! ', link, 'is on', domain, ' and the page is', page,'\n\n\n')
                with open('hotelBacklinks.csv', 'a') as csvfile:
                    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
                    writer.writerow({'hotelURL':link, 'targetDomain': domain})
编辑:这是其中一个的完整错误行。这并没有导致刮擦崩溃,但是有很多这样的行,所以我想我没有得到我本来想要的那么多页面。错误行:
2017-09-24 14:21:29[scrapy.core.scraper]错误:下载错误:无法绑定:24:打开的文件太多。

提前谢谢你的提示

  • 您应该使用
    管道
    来保存所有刮取的数据
  • 出现此错误是因为有许多函数调用
    parse\u page
    。每个函数都尝试打开和写入同一个文件。写入文件是块操作 这是Scrapy的医生
  • 您应该使用
    管道
    来保存所有刮取的数据
  • 出现此错误是因为有许多函数调用
    parse\u page
    。每个函数都尝试打开和写入同一个文件。写入文件是块操作 这是Scrapy的医生

  • 你在让我们猜测错误发生在哪里。编辑您的问题以包含完整的错误回溯,包括导致错误的代码行。此外,最好在函数顶部打开csv文件一次,而不是关闭并重新打开每个链接。@JohnGordon,谢谢,我已经添加了其中一个。这是一个从Scrapy记录的错误,它不是一个严重错误,所以我不会得到导致它的代码的特定行的回溯。另外,感谢csv提示,我已经修复了。您让我们猜测错误发生在哪里。编辑您的问题以包含完整的错误回溯,包括导致错误的代码行。此外,最好在函数顶部打开csv文件一次,而不是关闭并重新打开每个链接。@JohnGordon,谢谢,我已经添加了其中一个。这是一个从Scrapy记录的错误,它不是一个严重错误,所以我不会得到导致它的代码的特定行的回溯。另外,感谢csv提示,我已经解决了这个问题。