zcyeee / EastMoney_Crawler

东方财富网股吧爬虫,爬取帖子及其评论的相关信息,并储存到数据库中(附详细操作说明)
MIT License
32 stars 7 forks source link

前辈问一下这种报错应该怎样解决? #1

Open zoumy1 opened 6 months ago

zoumy1 commented 6 months ago

zssh000001: 第 0 页出现了错误 batch op errors occurred, full error: {'writeErrors': [{'index': 0, 'code': 11000, 'errmsg': 'E11000 duplicate key error collection: post_info.post_zssh000001 index: id dup key: { _id: 2 }', 'keyPattern': {'_id': 1}, 'keyValue': {'_id': 2}, 'op': {'_id': 2, 'post_title': '#基金披露一季报,国家队救市路径浮水#5%', 'post_view': '20', 'comment_num': 0, 'post_url': 'http://guba.eastmoney.com/news,zssh000001,1419663383.html', 'post_date': '2024-04-21', 'post_time': '10:47'}}], 'writeConcernErrors': [], 'nInserted': 0, 'nUpserted': 0, 'nMatched': 0, 'nModified': 0, 'nRemoved': 0, 'upserted': []}

000729燕京啤酒是能正常爬取的,zssh000001就是这样一直报错了

zcyeee commented 6 months ago

看报错是因为写入时 _id 值重复了( MongoDB 中要求 _id 的值是唯一的)。

原因:当时设计爬取帖子的逻辑时只考虑了一次成功爬取完需要的所有帖子,没有设置中断爬取后接续爬取的功能(评论可以中断爬取,帖子暂时不行)。而 post的 _id 值每次爬取都会从 1 开始累加计算,所以如果中断后重新爬取, _id 键值会重复然后报错。

解决办法1:把 post_000001 这个数据表手动删除掉(或者改个名字),然后重新爬取(我这里可以成功运行)。 解决办法2:把 parser.py 文件中第 11 行的 self.id 值(初始值为0)改的大一点(超过数据表中已有的 _id 值大小)。(不建议这么做,推荐解决办法1)

后续有时间我会完善这部分的代码逻辑,优化使用体验,谢谢你的 issue ~

zoumy1 commented 5 months ago

invalid literal for int() with base 10: '1.8万' 爬取的时候还会报这种错误 好像是post_view的

zcyeee commented 5 months ago

invalid literal for int() with base 10: '1.8万' 爬取的时候还会报这种错误 好像是post_view的

请问是爬取哪支股票具体 xx页-xx页 的 post 时出现的这个问题呀,我看看能不能本地复现一下这个 bug。 因为我在代码中就是以字符串格式来储存 post_view 的,并没有使用 int() 函数来把其转化为整数,本地也可以正常爬取,所以很好奇究竟是哪种异常情况导致了这样的报错。

ps:我在处理评论个数 comment_num 时确实使用了 int() 将其转化为整数型储存,但出现 '1.8万' 的极端评论个数似乎更不大可能))

zoumy1 commented 5 months ago

invalid literal for int() with base 10: '1.8万' 爬取的时候还会报这种错误 好像是post_view的

请问是爬取哪支股票具体 xx页-xx页 的 post 时出现的这个问题呀,我看看能不能本地复现一下这个 bug。 因为我在代码中就是以字符串格式来储存 post_view 的,并没有使用 int() 函数来把其转化为整数,本地也可以正常爬取,所以很好奇究竟是哪种异常情况导致了这样的报错。

ps:我在处理评论个数 comment_num 时确实使用了 int() 将其转化为整数型储存,但出现 '1.8万' 的极端评论个数似乎更不大可能))

出现的次数不多 , 好像都是‘1.X万’这几个会出现 ,zssh000001 60290页 时间 2018/10/7-2018/10/5 之前都是一直报错的 这次是报错之后继续开始了 1

zcyeee commented 5 months ago

okk 已成功解决该问题,重新下载 parser.py 把原来的替换掉就行

具体原因是因为你爬的上证指数吧,这里面确实存在评论个数过万的极端情况 hhh