我正在抓取一个叫喊框,它仅限于10条消息;它是异步的,当第11个项目出现时,第一个项目就消失了。
我设置了一个操纵up,它将正确的结构作为一个数组刮取,然后转储到mongodb中。自动化的最简单方法是使用watch
命令和静态间隔运行脚本。
问题是如何跳过日志中重复的项目,项目不应该是唯一的,只是不要重复两次。而且可能有更好的方法来循环此过程。attached screenshot
答案 0 :(得分:0)
您可以在MongoDB中使用db.collection.distinct()
从数据库中获取不同的消息:
db.messages.distinct( 'message' );
或者,您可以使用db.collection.createIndex()
在数据库中创建唯一索引,以便该集合将不接受索引键值与索引中现有值匹配的文档的插入或更新:
db.messages.createIndex( { 'message' : 1 }, { 'unique' : true } );
在Puppeteer脚本中,您可以将page.evaluate()
与Set
对象结合使用,以从要抓取的网页中获取不同的消息:
const distinct_messages = await page.evaluate( () => new Set( Array.from( document.querySelectorAll( '.message' ), e => e.textContent ) ) );