一次用爬虫扒取豆瓣电影条目信息的尝试
来源:互联网 发布:sai在mac虚拟机没压感 编辑:程序博客网 时间:2024/05/17 03:01
最近做个电影的东西,突发奇想把豆瓣的电影条目扒下来一点,看了下,现在大概有140个左右的条目,这些条目分得比较细,连某个人的电影都分了出来,所以重复的也比较多,当然这些我都还没细弄,只是大致扒了一点,而且因为扒得太快,导致暂时被封ip了。
昨天尝试了很久,本来不登录也能正常扒取电影信息,但是现在不行了,必须要登录。
豆瓣的反扒机制做得很简陋,以至于我成功时候以为就没有反扒机制。
刚开始是直接通过链接来扒取,豆瓣有的网页是返回json字符串,有的是返回整个网页,所以要区分开来。
整个扒取最关键的一点是初次登录时候response的headers里面set-cookie中的“dbcl2”一项,登录豆瓣时候的login返回的headers中set-cookie是有多项的,我没在npm库里面找到有什么好的解析方法,所以这个只能每次扒的时候手动添加,请求时候添加cookie用的是tough-cookie,这个库还是比较好用的,配合request-promise-native很简单,官方也有例子,大致看下就会了。
放一个获取单页20个条目的源代码,tough-cookie官方给的例子我觉得有的地方不太清晰,其实直接按照
let cookieJar = new request.jar() cookieJar.setCookie('key=value', 'https://movie.douban.com')
这种格式设置就行了,多个就写多行。
代码
let getSinglePage = function (url) { return new Promise((resolve, reject) => { let getPage = function () { let cookieJar = new request.jar() cookieJar.setCookie('dbcl2="你的dbcl2值"', 'https://movie.douban.com') let options = { uri: url, jar: cookieJar, transform: function(body) { console.log('body', body) return cheerio.load(body) } } rp(options).then(($) => { let movieInfos = [] console.log('$', $) $('.nbg').each(function(index, el) { let movieInfo = {} movieInfo.title = $(this).attr('title') movieInfo.url = $(this).attr('href') movieInfo.poster = $(this).find('img').attr('src') movieInfo.rating = $(this).parent().next().find('span[class=rating_nums]').text() movieInfos.push(movieInfo) }); resolve(movieInfos) }).catch((err) => { reject(err) }) } setTimeout(getPage(), 2000) })}
0 0
- 一次用爬虫扒取豆瓣电影条目信息的尝试
- Python爬虫入门 | 2 爬取豆瓣电影信息
- 小菜鸟的第一个爬虫:豆瓣爬取电影信息
- 用Python爬虫爬取豆瓣TOP250电影
- 入门级爬虫 抓取豆瓣top250 的电影信息
- 爬虫小demo爬取豆瓣电影
- 基于BeautifulSoup爬取豆瓣网上的电影信息
- 豆瓣电影的爬虫示例
- python爬虫之获取豆瓣电影信息
- 爬取豆瓣的电影
- <Python爬虫>爬取豆瓣图书/豆瓣电影系列
- [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息
- Python爬虫(1)——基于BeautifulSoup爬取豆瓣电影信息
- python 爬虫学习三(Scrapy 实战,豆瓣爬取电影信息)
- 爬取豆瓣网电影信息
- python爬取豆瓣电影信息
- scrpy 豆瓣电影信息爬取
- python爬取豆瓣电影信息
- linux网络设置
- Apache配置http访问转https(widows和linux通用)
- Oracle简单基础面试题01
- 数据结构——串的模式匹配算法
- Pandas Series
- 一次用爬虫扒取豆瓣电影条目信息的尝试
- UE4 影分身之术
- cocos2d-js 自定义事件监听派发
- 如何设置当程序出现异常后进行重启
- Python 字符串
- ZeroClipboard 使用详细介绍,php 复制剪贴板,flash复制剪贴板插件
- CentOS系统中常用查看日志命令
- java学习【知识点及代码12.1异常】
- C# 拼接字符串的几种方式和性能