最近做个电影的东西,突发奇想把豆瓣的电影条目扒下来一点,看了下,现在大概有140个左右的条目,这些条目分得比较细,连某个人的电影都分了出来,所以重复的也比较多,当然这些我都还没细弄,只是大致扒了一点,而且因为扒得太快,导致暂时被封ip了。
昨天尝试了很久,本来不登录也能正常扒取电影信息,但是现在不行了,必须要登录。
豆瓣的反扒机制做得很简陋,以至于我成功时候以为就没有反扒机制。
刚开始是直接通过链接来扒取,豆瓣有的网页是返回json字符串,有的是返回整个网页,所以要区分开来。
整个扒取最关键的一点是初次登录时候response的headers里面set-cookie中的“dbcl2”一项,登录豆瓣时候的login返回的headers中set-cookie是有多项的,我没在npm库里面找到有什么好的解析方法,所以这个只能每次扒的时候手动添加,请求时候添加cookie用的是tough-cookie,这个库还是比较好用的,配合request-promise-native很简单,官方也有例子,大致看下就会了。
放一个获取单页20个条目的源代码,tough-cookie官方给的例子我觉得有的地方不太清晰,其实直接按照
let cookieJar = ne