简单NodeJS爬虫和使用cookie进行模拟登录

JavaScript023

简单NodeJS爬虫和使用cookie进行模拟登录,第1张

       NodeJS做爬虫也是很方便的。因为nodejs有HTTP模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。       首先,需要的库文件,       1、superagent 是个轻量的的 http 方面的库,就像jquery的post,和get一样,很简单。       2、cheerio 是一个服务端操作DOM的库,简直就是服务端的jquery。     好的,我们需要抓取某个网站的题目。如下图。这个系统下,及时是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。现在我们有个需求,先抓取15页,根据URL的参数可以页数就是地址中 的P。并且要有本地cookie,获取cookie的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印document.cookie,得到之后,复制进txt文本。用fs模块读取并转换成字符串。在superagent请求时,把cookie传进去。好了,控制台已经不输出“未登录”,说明已经登录成功了。

手动输入吗?可以这样: //截验证码图 casper.echo('input code')casper.wait(10000)//在wait完前看图,输入验证码到指定文件 casper.then(function(){ var code = fs.read("code.txt")})

Ruby中爬虫的实现

Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 安装

sudo gem install mechanize

抓取网页

require 'rubygems'

require 'mechanize'

agent = Mechanize.new

page = agent.get('http://google.com/')

模拟点击事件

page = agent.page.link_with(:text =>'News').click

模拟表单提交

google_form = page.form('f')

google_form["q"] = 'ruby mechanize'

page = agent.submit(google_form, google_form.buttons.first)

pp page

分析页面,mechanize用的是nokogiri解析网页的,所以可以参照nokogiri的文档

table = page.search('a')

text = table.inner_text

puts text

有几点注意的地方: 如果需要先登录的网页,那么可以在网站先登录,登录后记录JSESSIONID,然后赋值给agent

cookie = Mechanize::Cookie.new("JSESSIONID", "BA58528B76124698AD033EE6DF12B986:-1")

cookie.domain = "datamirror.csdb.cn"

cookie.path = "/"

agent.cookie_jar.add!(cookie)

如果需要保存网页,使用.save_as,(或许save也可以,我没试过)例如

agent.get("google.com").save_as