scrapy遇到的坑

 

1.有时候我们爬取数据跑了半天,突然报错了,例如网络中断,我们想继续爬取,不需程序从头开始爬取,可以采取下面的方案

要启用一个爬虫的持久化,运行以下命令:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

然后,你就能在任何时候安全地停止爬虫(按Ctrl-C或者发送一个信号)。恢复这个爬虫也是同样的命令:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

2.pipline项目管道文件中,我们经常不止定义一个下载管道,就需要我们在setting里面ITEM_PIPELINES设置优先级,级别高的优先执行,级别低的后执行,但是级别高的process_item方法里面必须要teturn item 否则级别低的管道获取不到item。

3.定时执行多个爬虫任务,

在main.py里面写以下代码

import time
import os
while True:
    print('the first spider')
    os.system("scrapy crawl human -o human.json")
    print('the second spider')
    os.system("scrapy crawl nbgov -o nbgov.json")
    time.sleep(86400)# 24hours

4.Scrapy的默认Downloader Middleware的设置如下:

'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
    'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
    'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
    'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,

要使得我们自定义的CookiesMiddleware生效,它在内置的CookiesMiddleware之前调用。内置的CookiesMiddleware的优先级为700,所以这里我们设置一个比700小的数字即可。

要使得我们自定义的ProxyMiddleware生效,它在内置的HttpProxyMiddleware之前调用。内置的HttpProxyMiddleware的优先级为750,所以这里我们设置一个比750小的数字即可。

 

5.scrapy如果在保存数据的时候报错

InvalidDocument: Cannot encode object:

那么可能是你的item中的数据有对象,比如numpy, 将数据的数字转为int或者float,或者其他的转为str,将数据变为非对象就可以了 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值