请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

启动scrapy crawl jobbole -s JOBDIR=job_info/001报错

图片描述
Unhandled error in Deferred:
2020-04-13 16:21:35 [twisted] CRITICAL: Unhandled error in Deferred:

2020-04-13 16:21:35 [twisted] CRITICAL:
Traceback (most recent call last):
File “H:\anaconda3.4\anaconda_\lib\site-packages\twisted\internet\task.py”, line 517, in oneWorkUnit
result = next(self.iterator)
File "H:\anaconda3.4\anaconda
\lib\site-packages\scrapy\utils\defer.py", line 63, in
work = (callable(elem, *args, **named) for elem in iterable)
File "H:\anaconda3.4\anaconda
\lib\site-packages\scrapy\core\scraper.py", line 183, in process_spidermw_output
self.crawler.engine.crawl(request=output, spider=spider)
File "H:\anaconda3.4\anaconda
\lib\site-packages\scrapy\core\engine.py", line 210, in crawl
self.schedule(request, spider)
File “H:\anaconda3.4\anaconda_\lib\site-packages\scrapy\core\engine.py”, line 216, in schedule
if not self.slot.scheduler.enqueue_request(request):
File “H:\anaconda3.4\anaconda_\lib\site-packages\scrapy\core\scheduler.py”, line 57, in enqueue_request
dqok = self.dqpush(request)
File "H:\anaconda3.4\anaconda
\lib\site-packages\scrapy\core\scheduler.py", line 86, in dqpush
self.dqs.push(reqd, -request.priority)
File "H:\anaconda3.4\anaconda
\lib\site-packages\queuelib\pqueue.py", line 35, in push
q.push(obj) # this may fail (eg. serialization error)
File “H:\anaconda3.4\anaconda_\lib\site-packages\scrapy\squeues.py”, line 15, in push
s = serialize(obj)
File “H:\anaconda3.4\anaconda_\lib\site-packages\scrapy\squeues.py”, line 27, in pickle_serialize
return pickle.dumps(obj, protocol=2)
File "H:\anaconda3.4\anaconda
\lib\site-packages\parsel\selector.py", line 204, in getstate
raise TypeError(“can’t pickle Selector objects”)
TypeError: can’t pickle Selector objects

正在回答 回答被采纳积分+3

2回答

bobby 2020-04-16 15:52:34

https://img1.sycdn.imooc.com/szimg/5e980eb6095bdd5509690451.jpg 你先试试不放这个进去会不会报错?

0 回复 有任何疑惑可以回复我~
  • 提问者 愚墨 #1
    把item_loader,去掉的话是不是报错,数据也可以存入数据库中。
    我有个疑问,我看您的源码时,也似这么写的····
    
    还有就是scrapy的暂停与重启,对于往后的开发代码有什么影响吗?
    回复 有任何疑惑可以回复我~ 2020-04-16 19:27:13
  • bobby 回复 提问者 愚墨 #2
    你留下qq我加你看看 课程讲解的如何可以的话 那么应该就是可以 你的scrapy版本是多少
    回复 有任何疑惑可以回复我~ 2020-04-17 19:12:31
bobby 2020-04-14 17:13:24

yield request对象的时候不能将selector对象放入到meta属性中,因为这个地方的值会进行pickle 这样会抛出异常 你可以将response的html放入进去 然后到另一个函数的时候在生成selector对象

0 回复 有任何疑惑可以回复我~
  • 提问者 愚墨 #1
    你好老师,我还是有点不太理解?是我解析出来selector,不能放入meta属性中吗?但是我直接运行spider crawl jobbole 时没有出现过,这似异常,还请老师在指点一下,谢谢。
    回复 有任何疑惑可以回复我~ 2020-04-14 21:35:15
  • 提问者 愚墨 #2
    这是我的解析代码:
    def parse_detail(self, response):
          match_re = re.match('.*?(\d+)', response.url)
            if match_re:
                post_id = match_re.group(1)
          item_loder = ArticleItemLoder(item=JobBoleArticleItem(), response=response)
                item_loder.add_xpath('title', '//div[@id="news_main"]/div[@id="news_title"]/a/text()')
    ........
    yield Request(url=parse.urljoin(response.url, "/NewsAjax/GetAjaxNewsInfo?contentId={}".format(post_id)),
                              meta={'article_item': item_loder, 'url': response.url},
                              callback=self.parse_nums
                              )
    回复 有任何疑惑可以回复我~ 2020-04-14 22:01:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信