ro_crawler 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 138a31aa60488f939724b71f2d74b2abcfa07e16
4
+ data.tar.gz: eb14725c6bce8e6150eaf11cfe66d13a120c934c
5
+ SHA512:
6
+ metadata.gz: 0b38276470529131ac0fd360f31a2cf232fc8d026d51a27abd815af4f203cef29733226b6e9d4c1e974e82611bea4869a63ce01d4b954f6cf57477818c0cbda4
7
+ data.tar.gz: 9fcdee015c33106ac2f82831136e6dddb314516143caab342a3e43bd460c33b95561cb00e9b2fbcca0987e6ed6fcf36a5dd74bc09cf6119eb188f1f90a0e9f68
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = Crawler
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Crawler'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+ Bundler::GemHelper.install_tasks
20
+
21
+ require 'rake/testtask'
22
+
23
+ Rake::TestTask.new(:test) do |t|
24
+ t.libs << 'lib'
25
+ t.libs << 'test'
26
+ t.pattern = 'test/**/*_test.rb'
27
+ t.verbose = false
28
+ end
29
+
30
+
31
+ task default: :test
32
+
33
+ require 'rspec/core/rake_task'
34
+
35
+ RSpec::Core::RakeTask.new
36
+
37
+ task default: :spec
@@ -0,0 +1,149 @@
1
+ module RoCrawler
2
+ class Base
3
+ include RoSupport::Debug
4
+
5
+ def spider(url, anchor_selector, intr_selector)
6
+ @url = url
7
+ @home_url = get_home_url(url)
8
+ @auchor_selector = anchor_selector
9
+ @intr_selector = intr_selector
10
+ get_link_titles
11
+ get_contents
12
+ browser_close
13
+ end
14
+
15
+ def get_link_titles
16
+ @link_titles = get_tags_attrs_from(@url, @auchor_selector, 'href', 'text')
17
+ end
18
+
19
+ def get_contents
20
+ ro_raise(err "@link_titles is nil", output: ['@url']) if @link_titles.nil?
21
+ @link_title_contents = @link_titles.dup
22
+ @link_title_contents.each do |link_content|
23
+ if link_content[0][/http/]
24
+ link = link_content[0]
25
+ else
26
+ link = "#{@home_url}#{link_content[0]}"
27
+ end
28
+
29
+ link_content << intr = get_tags_attrs_from(link, @intr_selector, 'text')
30
+ unless intr.is_a? String
31
+ raise_log 'intr must be a string', 'ro_crawler_base.log'
32
+ end
33
+ link_content
34
+ end
35
+ end
36
+
37
+ def handler(&blk)
38
+ handle @link_title_contents, &blk
39
+ end
40
+
41
+ def open_browser(driver)
42
+ ::Watir::Browser.new driver
43
+ end
44
+
45
+ def local?
46
+ `google-chrome --version`[/Google Chrome/] ? true : false
47
+ end
48
+
49
+ def crawler(opt={})
50
+ if local?
51
+ if opt[:driver]
52
+ @b = open_browser opt[:driver]
53
+ else
54
+ @b = open_browser :phantomjs
55
+ end
56
+ end
57
+ end
58
+
59
+ def get_html_from(url)
60
+ html = ""
61
+ @b ||= crawler
62
+
63
+ get_html = lambda do
64
+ if url[/http/]
65
+ Nokogiri::HTML.parse @b.goto(url).html
66
+ else
67
+ Nokogiri::HTML.parse File.read(url)
68
+ end
69
+ end
70
+
71
+ html = get_html.call
72
+ end
73
+
74
+ def get_tags_from(url, selector)
75
+ p "get tags: #{selector} from url:#{url}"
76
+ html = get_html_from(url)
77
+ result = html.css(selector)
78
+ raise "#{selector} can't find result" if result.nil?
79
+ if result.respond_to?(:inner_html)
80
+ tag = result
81
+ elsif result.is_a?(Nokogiri::XML::NodeSet)
82
+ tags = []
83
+ result.each do |tag|
84
+ tags << tag
85
+ end
86
+ tags
87
+ end
88
+ end
89
+
90
+ def get_attrs_in(tags, *attr_names)
91
+ result = []
92
+ tags.each do |tag|
93
+ attr_value = []
94
+ judge = lambda do |attr_names|
95
+ attr_names.each do |attr_name|
96
+ if attr_name == 'text'
97
+ attr_value << tag.text
98
+ elsif attr_name == 'inner_html'
99
+ attr_value << tag.inner_html
100
+ else
101
+ attr_value << tag.attribute(attr_name).value
102
+ end
103
+ end
104
+ end
105
+
106
+ if attr_names.length > 1
107
+ judge.call(attr_names)
108
+ elsif attr_names.length == 1
109
+ attr_name = attr_names
110
+ judge.call(attr_name)
111
+ attr_value = attr_value.join
112
+ end
113
+ result << attr_value
114
+ end
115
+
116
+ eval %Q(return #{result.to_args})
117
+ end
118
+
119
+ def get_tags_attrs_from(url, tags_selector, *attr_names)
120
+ tags = get_tags_from(url, tags_selector)
121
+ get_attrs_in(tags, *attr_names)
122
+ end
123
+
124
+ def browser_close
125
+ @b.close if @b.respond_to?(:close)
126
+ end
127
+
128
+ def handle(results)
129
+ if results.is_a?(Array)
130
+ results.each do |result|
131
+ yield result
132
+ end
133
+ end
134
+ end
135
+
136
+ def get_home_url(url)
137
+ url[/(http(s)?\:\/\/)(www\.)?.+\.((com)|(org)|(info)|(me)|(net)|(cn))/]
138
+ end
139
+
140
+ # Handle accident error eg. timeout cause
141
+ def handle_accident_error
142
+ yield @b if @b && block_given?
143
+ end
144
+
145
+ def proxy?(port)
146
+ !`lsof -i:#{port}`.empty?
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,18 @@
1
+ #require 'nokogiri'
2
+ #module RoCrawler
3
+ # module Methods
4
+ # include ::RoCrawler::Crawler
5
+ # def get_intr_from(html)
6
+ # doc = Nokogiri::HTML.parse html
7
+ # doc.css('.jobIntro, .j_i')
8
+ # .gsub(/(本站提醒:如何识别虚假招聘信息?求职必看,切勿受骗上当!)|(如何写一份简单、直接、高效的求职信?)/, '')
9
+ # end
10
+ #
11
+ # def get_links_contents_from(url, selector)
12
+ # as = @browser.css @link_selector
13
+ # unless as.nil?
14
+ # @offers = as.collect('text', 'href')
15
+ # end
16
+ # end
17
+ # end
18
+ #end
@@ -0,0 +1,14 @@
1
+ module RoCrawler
2
+ module Misc
3
+ ::String.class_eval do
4
+ def urlify(options={})
5
+ return self if self[/http/]
6
+ if options[:local]
7
+ return "file://#{self}"
8
+ else
9
+ "http://#{self}" unless self[/http:\/\//]
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module RoCrawler
2
+ VERSION = "0.0.4"
3
+ end
@@ -0,0 +1,47 @@
1
+ module RoCrawler
2
+ include RoCrawler::Misc
3
+ module Watir
4
+ module Browser
5
+ ::Watir::Browser.class_eval do
6
+ # Get html from path
7
+ # eg get_html_from 'baidu.com'
8
+ # eg get_html_from '/home/users/testfile'
9
+ def goto(url, options = {})
10
+ if options[:local]
11
+ url = url.urlify local: true
12
+ else
13
+ url = url.urlify local: true
14
+ end
15
+ @driver.navigate.to url
16
+ run_checkers
17
+ self
18
+ end
19
+
20
+ def css(selector)
21
+ es = self.elements(css: selector)
22
+ if es.size == 0
23
+ "Element #{selector} is not exist"
24
+ return
25
+ elsif es.size == 1
26
+ return es.first
27
+ else
28
+ es
29
+ end
30
+ end
31
+
32
+ def batch &blk
33
+ self.instance_eval &blk
34
+ end
35
+
36
+ def next_page_url
37
+ self.css('a').each do |a|
38
+ reg = /(下一页)|(next)/i
39
+ if a.text[reg]
40
+ return a.attribute 'href'
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,10 @@
1
+ #module RoCrawler
2
+ # module WatirDSL
3
+ # ::Watir::Element.class_eval do
4
+ # def attribute selector
5
+ # assert_exists
6
+ # @element.attribute selector
7
+ # end
8
+ # end
9
+ # end
10
+ #end
@@ -0,0 +1,18 @@
1
+ #module RoCrawler
2
+ # module WatirDSL
3
+ # ::Watir::ElementCollection.class_eval do
4
+ # def collect *selectors
5
+ # result = []
6
+ # link_contents = []
7
+ # self.each do |tag|
8
+ # selectors.each do |selector|
9
+ # link_contents << tag.attribute(selector)
10
+ # end
11
+ # result << link_contents
12
+ # end
13
+ #
14
+ # eval "return #{result.to_args}"
15
+ # end
16
+ # end
17
+ # end
18
+ #end
@@ -0,0 +1,8 @@
1
+ require 'watir-webdriver'
2
+ require 'active_support'
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../watir', __FILE__)
5
+
6
+ #require 'element'
7
+ require 'browser'
8
+ #require 'element_collection'
data/lib/ro_crawler.rb ADDED
@@ -0,0 +1,21 @@
1
+ # require all files in dir name is same with __FILE_-
2
+ autoload :FileActions, 'ro_support/file_actions'
3
+ autoload :Array, 'ro_support/array'
4
+ autoload :Log, 'ro_support/log'
5
+
6
+ include RoSupport::FileActions
7
+ include RoSupport::Array
8
+ include RoSupport::Log
9
+
10
+ require 'watir-webdriver'
11
+
12
+ $LOAD_PATH.unshift File.expand_path('../..', __FILE__)
13
+
14
+ require 'lib/ro_crawler/misc'
15
+ require 'lib/ro_crawler/watir'
16
+
17
+ module RoCrawler
18
+ include RoSupport::FileActions
19
+ autoload_all_files_in(File.expand_path("../ro_crawler", __FILE__))
20
+ end
21
+
@@ -0,0 +1,217 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=gbk"><title>北京网站前端研发工程师(实习生)招聘_美薇亭(北京)文化发展有限公司招聘_应届生求职网</title>
3
+ <meta name="keywords" content="网站前端研发工程师(实习生) 美薇亭(北京)文化发展有限公司 校园招聘 应届生求职网">
4
+ <meta name="description" content="网站前端研发工程师(实习生) 美薇亭(北京)文化发展有限公司 工作职责:1、参与RIA富交互产品的前端系统的开发与实现2、参与Web与移动互联网前沿技术研究与新技术创新职位要求: 1、熟悉HTML5/CSS3等相关技术2、熟悉J..."><script>
5
+ if ((screen.width < 1210)){document.write("<link rel='stylesheet' type='text/css' href='/template/display/layout_1024_show_v2.css' />")}
6
+ else{document.write("<link rel='stylesheet' type='text/css' href='/template/display/layout_show_v2.css' />")}
7
+ </script><link rel="stylesheet" type="text/css" href="/template/display/layout_show_v2.css">
8
+ <style>
9
+ body{behavior:url("/template/display/csshover.htc");margin:0;padding:0;}
10
+ </style>
11
+
12
+ <script src="/globals/scripts/globals.js" language="javascript" type="text/javascript"></script>
13
+ <script src="/globals/scripts/ajax.js" language="javascript" type="text/javascript"></script>
14
+ <script src="/globals/scripts/category.js" language="javascript" type="text/javascript"></script><script src="http://bdimg.share.baidu.com/static/js/logger.js?cdnversion=382445"></script><link href="http://bdimg.share.baidu.com/static/css/bdsstyle.css?cdnversion=20130704" rel="stylesheet" type="text/css"></head><body><iframe frameborder="0" style="display: none;"></iframe><div id="bdshare" style="right: 0px; top: 312px; position: fixed; height: 330px; overflow: hidden;"><img src="http://bdimg.share.baidu.com/static/images/r1.gif" alt="" style="float:left;margin-top:58px;"><iframe id="bdsIfr" style="position:absolute;display:none;z-index:9999;" frameborder="0"></iframe><div id="bdshare_l" style="display: none; left: 24px;"><div id="bdshare_l_c"><h6>分享到</h6><ul><li><a href="#" class="bds_mshare mshare">一键分享</a></li><li><a href="#" class="bds_qzone qqkj">QQ空间</a></li><li><a href="#" class="bds_tsina xlwb">新浪微博</a></li><li><a href="#" class="bds_baidu bdsc">百度云收藏</a></li><li><a href="#" class="bds_renren rrw">人人网</a></li><li><a href="#" class="bds_tqq txwb">腾讯微博</a></li><li><a href="#" class="bds_bdxc bdxc">百度相册</a></li><li><a href="#" class="bds_kaixin001 kxw">开心网</a></li><li><a href="#" class="bds_tqf txpy">腾讯朋友</a></li><li><a href="#" class="bds_tieba bdtb">百度贴吧</a></li><li><a href="#" class="bds_douban db">豆瓣网</a></li><li><a href="#" class="bds_tsohu shwb">搜狐微博</a></li><li><a href="#" class="bds_bdhome bdhome">百度新首页</a></li><li><a href="#" class="bds_sqq sqq">QQ好友</a></li><li><a href="#" class="bds_thx thx">和讯微博</a></li><li><a href="#" class="bds_more">更多...</a></li></ul><p><a href="#" class="goWebsite">百度分享</a></p></div></div></div><div id="category_appended_container" style="z-index:3;display:block;float:left;"></div>
15
+ <script src="/globals/scripts/control.js" language="javascript" type="text/javascript"></script>
16
+ <script src="/globals/scripts/checks.js" language="javascript" type="text/javascript"></script>
17
+ <script src="/template/display/display_jobs.js" language="javascript" type="text/javascript"></script>
18
+ <script src="http://www.yingjiesheng.com/cache/outer/jp_jobshow_txt.js" language="javascript" type="text/javascript"></script>
19
+ <script src="/template/display/display_jobs_lang.js" language="javascript" type="text/javascript"></script>
20
+ <script src="/template/display/moreCity.js" language="javascript" type="text/javascript"></script>
21
+ <script src="$urlconf[domains]}template/display/globals/scripts/jquery.js" language="javascript" type="text/javascript"></script>
22
+ <script src="/globals/scripts/jqModal.js" language="javascript" type="text/javascript"></script>
23
+
24
+ <script type="text/javascript">
25
+ var weibo_w = 106 , weibo_h = 28;
26
+ var weiboparam = {
27
+ url:location.href,
28
+ type:'5',
29
+ count:'', /**是否显示分享数,1显示(可选)*/
30
+ appkey:'', /**您申请的应用appkey,显示分享来源(可选)*/
31
+ title:'我已在应届生求职网www.yingjiesheng.com上成功申请 美薇亭(北京)文化发展有限公司 网站前端研发工程师(实习生) 职位,你也赶快来申请吧,申请网址:', /**分享的文字内容(可选,默认为所在页面的title)*/
32
+ pic:'', /**分享图片的路径(可选)*/
33
+ ralateUid:'1241330914', /**关联用户的UID,分享微博会@该用户(可选)*/
34
+ rnd:new Date().valueOf()
35
+ }
36
+ var weibotemp = [];
37
+ for( var p in weiboparam ){
38
+ weibotemp.push(p + '=' + encodeURIComponent( weiboparam[p] || '' ) )
39
+ }
40
+ var my_job_id = '310147';
41
+ </script>
42
+ <link href="/template/css/popup.css" rel="stylesheet" type="text/css">
43
+ <link href="/template/css/category.css" rel="stylesheet" type="text/css">
44
+
45
+
46
+
47
+
48
+ <div id="jobappsection" class="mypopup"></div>
49
+ <div class="head">
50
+ <div class="box">
51
+ <div class="h_l"><a class="logo" href="http://www.yingjiesheng.com"></a>欢迎来到应届生求职网-中国大学生求职第一网站</div>
52
+ <div class="l_r"><span id="jobshow_log_span"><a href="http://k.yingjiesheng.com/" target="_blank">个人账户登录</a> | <a href="http://my.yingjiesheng.com/index.php/personal/register.htm" target="_blank">个人用户注册</a> | <a href="http://my.yingjiesheng.com/index.php/company.htm" target="_blank">企业账户登录</a> | <a href="http://my.yingjiesheng.com/index.php/company/register.htm" target="_blank">企业用户注册</a></span> </div>
53
+ </div>
54
+ </div>
55
+ <div class="box">
56
+ <div class="menu">
57
+ <ol class="clearfix">
58
+ <li class="img"><img src="/images/display/mlefy.jpg"></li>
59
+ <li class="on"><a href="http://www.yingjiesheng.com/">首页</a></li>
60
+ <li><span><img src="/images/display/icon_hot2.gif"></span><a href="http://bbs.yingjiesheng.com/forum.php" target="_blank">BBS</a></li>
61
+ <li><a href="http://www.yingjiesheng.com/commend-fulltime-1.html" target="_blank">全职推荐</a></li>
62
+ <li><a href="http://www.yingjiesheng.com/commend-parttime-1.html" target="_blank">实习推荐</a></li>
63
+ <li><a href="http://s.yingjiesheng.com/" target="_blank">职位搜索</a></li>
64
+ <li><a href="http://my.yingjiesheng.com/xuanjianghui.html" target="_blank">宣讲会</a></li>
65
+ <li><a href="http://zph.yingjiesheng.com/" target="_blank">招聘会</a></li>
66
+ <li><a href="http://www.yingjiesheng.com/industry/" target="_blank">行业招聘</a></li>
67
+ <li><a href="http://s.yingjiesheng.com/result.jsp?keyword=%E5%85%AC%E5%8A%A1%E5%91%98+OR+%E4%BA%8B%E4%B8%9A%E5%8D%95%E4%BD%8D&amp;do=2" target="_blank">公务员</a></li>
68
+ <li><a href="http://www.yingjiesheng.com/major/" target="_blank">分类求职</a></li>
69
+ <li><a href="http://www.yingjiesheng.com/deadline/" target="_blank">网申截止</a></li>
70
+ <li><a href="http://hotel.yingjiesheng.com/" target="_blank">旅社</a></li>
71
+ <li><a href="http://vip.yingjiesheng.com/newbook/2013/" target="_blank">求职书</a></li>
72
+ <li class="cur"><span><img src="/images/display/icon_hot2.gif"></span><a href="http://wenku.yingjiesheng.com/" target="_blank">文库</a></li>
73
+ <li class="img" style="text-align:right;"><img src="/images/display/mright.jpg"></li>
74
+ </ol>
75
+ </div>
76
+ </div>
77
+
78
+ <div class="box clearfix">
79
+ <div class="loca ">
80
+ <div id="area"><ol><li idd="上海" value="349">上海</li><li idd="北京" value="56">北京</li><li idd="广州" value="85">广州</li><li idd="深圳" value="102">深圳</li><li idd="武汉" value="186">武汉</li><li idd="南京" value="217">南京</li><li idd="天津" value="376">天津</li><li idd="成都" value="352">成都</li><li idd="其他地区" value="999">其他地区</li></ol></div>
81
+ <div id="type"><ol><li idd="全职" value="1">全职</li><li idd="兼职" value="2">兼职</li></ol></div>
82
+ <span style="_height:55px;"><form action="http://s.yingjiesheng.com/result.jsp" method="get" accept-charset="utf-8" onsubmit="document.charset='utf-8';" target="_blank"><big id="area_s">请选择地区</big><big id="type_s">全/兼职</big><input type="input" name="keyword" id="keyword" value="" class="input"><input type="submit" value="" class="btn"><input type="hidden" name="cityarea2" id="cityarea2"><input type="hidden" name="jobtype" id="jobtype" value="0"><input type="hidden" name="city" id="city" value="0"></form></span><b>
83
+ 当前位置:<a href="http://www.yingjiesheng.com">首页</a> » <a href="http://www.yingjiesheng.com/beijing/">北京</a>招聘 »
84
+ <a href="/company_5437055.html">美薇亭(北京)文化发展有限公司</a> » <a href="/job_310147.html">网站前端研发工程师(实习生)</a></b>
85
+ </div> <div class="main">
86
+ <div class="com_mleft">
87
+ <div class="com">
88
+ <h2><a href="/company_5437055.html" target="_blank">美薇亭(北京)文化发展有限公司</a></h2>
89
+ <ol><li style="width:50%">所属行业: 其他 </li><li>企业规模:51-100人</li><li>企业性质: 民营/私营企业</li></ol>
90
+ </div>
91
+ <div class="job_list">
92
+ <h1><a href="/job_310147.html" title="网站前端研发工程师(实习生)">网站前端研发工程师(实习生)</a>(北京总部,市场部)</h1>
93
+ <ul>
94
+ <li>工作地点:<span><a href="http://www.yingjiesheng.com/beijing/">北京</a></span></li><li>有效日期:<span>2013年08月16日 至 2013年11月14日</span></li><li>招聘人数:<span>3 人</span></li><li>职位性质:兼职/实习</li>
95
+ </ul>
96
+ <h2>网站前端研发工程师(实习生) 职位描述:</h2>
97
+ <div class="j_i">
98
+ 工作职责:<br>
99
+ 1、参与RIA富交互产品的前端系统的开发与实现<br>
100
+ 2、参与Web与移动互联网前沿技术研究与新技术创新<br>
101
+ <br>
102
+ <br>
103
+ 职位要求: <br>
104
+ 1、熟悉HTML5/CSS3等相关技术<br>
105
+ 2、熟悉JavaScript、Ajax、DOM等前端技术,掌握面向对象编程思想<br>
106
+ 3、熟悉Bootstrap、YUI等前端开源框架<br>
107
+ 4、熟悉W3C标准,对表现与数据分离、Web语义化等有深刻理解<br>
108
+ 5、熟练使用Linux系统<br>
109
+ 6、有互联网公司技术岗位实习经验者优先<br>
110
+ 7、有强烈的上进心和求知欲,善于学习和运用新知识<br>
111
+ <br>
112
+ 对职位感兴趣者,欢迎您投递简历至:career@awedding.com.cn。标题注明应聘“网站前端研发工程师(实习生)”。&nbsp; </div>
113
+ <div class="job_sq"><span id="apply310147"><a href="#" class="apply" onclick="showjobapp('310147');return false;"><img style="vertical-align:middle;" src="http://my.yingjiesheng.com/images/display/apply.jpg" title="申请该职位"></a></span>
114
+ <span><a href="http://my.yingjiesheng.com/index.php/personal/resume.htm/?menu=2" target="_new"><img style="vertical-align:middle;" src="http://my.yingjiesheng.com/images/display/write.jpg" title="马上填简历"></a></span>
115
+
116
+
117
+ <br>
118
+
119
+ <span id="faver310147"><a href="#" class="faver" onclick="yjs_add_fav('%C3%C0%DE%B1%CD%A4%A3%A8%B1%B1%BE%A9%A3%A9%CE%C4%BB%AF%B7%A2%D5%B9%D3%D0%CF%DE%B9%AB%CB%BE-%CD%F8%D5%BE%C7%B0%B6%CB%D1%D0%B7%A2%B9%A4%B3%CC%CA%A6%A3%A8%CA%B5%CF%B0%C9%FA%A3%A9','%2Fjob_310147.html');return false;">加入求职记事本</a>&nbsp;&nbsp;|&nbsp;&nbsp;
120
+ <a href="/company_5437055.html">该公司其他职位</a></span>&nbsp;&nbsp;|&nbsp;&nbsp;
121
+ <span id="emailer310147"><a href="#" class="emailer" onclick="emailer('310147','%CD%F8%D5%BE%C7%B0%B6%CB%D1%D0%B7%A2%B9%A4%B3%CC%CA%A6%A3%A8%CA%B5%CF%B0%C9%FA%A3%A9');return false;">推荐给好友</a></span>&nbsp;&nbsp;|&nbsp;&nbsp;
122
+ <span id="job_jubao310147"><a href="#" class="emailer" style="font-weight: bold;color: #d00;" onclick="job_jubao('310147','%CD%F8%D5%BE%C7%B0%B6%CB%D1%D0%B7%A2%B9%A4%B3%CC%CA%A6%A3%A8%CA%B5%CF%B0%C9%FA%A3%A9');return false;">向应届生举报该职位!</a></span>
123
+ </div>
124
+ <script src="/globals/scripts/job_note.js" language="javascript" type="text/javascript"></script><div style="border: 1px dotted #ffcbcb; margin: 10px 50px; padding: 10px; background: #fff1f1;">
125
+ <a href="http://bbs.yingjiesheng.com/thread-1100509-1-1.html" target="_blank">求职tips:提高警惕识破虚假招聘</a>
126
+ </div>
127
+
128
+ </div>
129
+ <dl class="about">
130
+ <dt><a href="/company_5437055.html" target="_blank">美薇亭(北京)文化发展有限公司</a>简介</dt>
131
+ <dd><p>
132
+ 中国婚嫁产业年产值数千亿,然而,年收入过亿的公司寥寥。这既说明了行业处于初期,也意味着无限的潜力。<br>
133
+ 2008年,美薇亭成立伊始,就用远超出行业标准的原则来约束要求自己。我们并不满足做一家作坊式的、保守的小婚庆公司,“推动行业发展”“建立上市标杆企业”才是我们动力的来源。美薇亭立志于成为行业中的创新者和领航者。<br>
134
+ 2009年起,陆续成为电影《恋爱吧》、《失恋33天》和《我愿意》的婚礼指导专家,让婚礼服务行业引起了大众的关注;<br>
135
+ 2010年,分别接受《中国经营报》和《创业家》杂志专访,让主流媒体开始注意到婚礼行业的魅力及价值;<br>
136
+ 2011年夏,美薇亭第一个提出,专业分工的重要性。把宴会设计职能从婚礼顾问里拆分,成立专业的宴会设计部;<br>
137
+ 2011年冬,美薇亭召开中国第一届国际婚礼专家论坛。把美国顶级宴会设计师Preston Bailey、David Beahm,明星级婚礼摄影师Joe Buissink、Denis Reggie邀请到中国进行演讲,引起行业和媒体轰动。<br>
138
+ 我们的每一步,都在引领行业发展。<br>
139
+ 现在,度过生存期的美薇亭,邀请您的加入。在这个美好而初期的行业,一起打造“标杆性”上市公司。 </p>
140
+
141
+ <div class="txt"> <ol> <li><span>企业网址:</span><a href="http://www.awedding.com.cn" target="_blank">http://www.awedding.com.cn</a></li>
142
+
143
+ </ol>
144
+
145
+ </div>
146
+ </dd>
147
+ </dl>
148
+ <div class="pre_next"><span class="left_job">上一职位:<a href="/job_310146.html">美薇亭(北京)文化发展有限公司招聘PHP研发工程师(实习生)</a></span><span class="right_job">下一职位:<a href="/job_310148.html">唐山市乐业商贸有限公司招聘办公室文员</a></span>
149
+ </div>
150
+ </div>
151
+ <div class="mright">
152
+ <div class="g_right">
153
+ <script async="" src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
154
+ <!-- my_yjs_right_300_250 -->
155
+ <ins class="adsbygoogle" style="display:inline-block;width:300px;height:250px" data-ad-client="ca-pub-5664019590241836" data-ad-slot="2841409830" data-adsbygoogle-status="done"><ins style="display:inline-table;border:none;height:250px;margin:0;padding:0;position:relative;visibility:visible;width:300px"><ins id="aswift_0_anchor" style="display:block;border:none;height:250px;margin:0;padding:0;position:relative;visibility:visible;width:300px"><iframe width="300" height="250" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&amp;&amp;s.handlers,h=H&amp;&amp;H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&amp;&amp;d&amp;&amp;(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){w.location.replace(h)}}" id="aswift_0" name="aswift_0" style="left:0;position:absolute;top:0;"></iframe></ins></ins></ins>
156
+ <script>
157
+ (adsbygoogle = window.adsbygoogle || []).push({});
158
+ </script>
159
+ </div>
160
+
161
+ <div class="gg_right">
162
+ <script type="text/javascript">
163
+ /*自定义标签云,创建于2013-8-8,my_right,300-250*/
164
+ var cpro_id = "u1340181";
165
+ </script>
166
+ <script src="http://cpro.baidustatic.com/cpro/ui/c.js" type="text/javascript"></script><script type="text/javascript" charset="utf-8" src="http://pos.baidu.com/ecom?di=u1340181&amp;dcb=BAIDU_CPRO_SETJSONADSLOT&amp;dtm=BAIDU_CPRO_SETJSONADSLOT&amp;dai=1&amp;jn=3&amp;ltu=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;liu=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;ltr=&amp;ps=417x910&amp;psr=1280x1024&amp;par=1280x1024&amp;pcs=1035x927&amp;pss=1210x1293&amp;pis=1035x927&amp;cfv=11&amp;ccd=24&amp;col=en-US&amp;coa=&amp;cec=GBK&amp;tpr=1376801689335&amp;kl=&amp;dis=16"></script><div style="display:none">-</div> <iframe id="cproIframe1" src="http://cpro.baidu.com/cpro/ui/uijs.php?rs=0&amp;tu=u1340181&amp;tn=baiduCustSTagLinkUnit&amp;n=yingjiesheng_cpr&amp;adn=1&amp;rsi1=250&amp;rsi0=300&amp;rad=&amp;rss0=&amp;rss1=&amp;conOP=0&amp;rss2=&amp;rss3=&amp;rss4=&amp;rss5=&amp;rss6=&amp;rsi5=4&amp;ts=1&amp;at=103&amp;ch=0&amp;cad=1&amp;aurl=&amp;rss7=&amp;cpa=1&amp;fv=11&amp;cn=1&amp;if=16&amp;word=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;refer=&amp;ready=1&amp;jk=20c9b89155f788e2&amp;jn=3&amp;lmt=1376772889&amp;csp=1280,1024&amp;csn=1280,1024&amp;ccd=24&amp;chi=2&amp;cja=true&amp;cpl=12&amp;cmi=89&amp;cce=true&amp;csl=en-US&amp;did=1&amp;rt=13&amp;dt=1376801690&amp;ev=16777216&amp;c01=0&amp;prt=1376801689335&amp;i3=f&amp;anatp=0&amp;stid=5&amp;lunum=6&amp;scale=&amp;skin=tabcloud_skin_1" width="300" height="250" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"></iframe>
167
+ </div>
168
+ <div class="b_right">
169
+ <script type="text/javascript">
170
+ /*300*250,创建于2013-8-7,my_yjs_right*/
171
+ var cpro_id = "u1339127";
172
+ </script>
173
+ <script src="http://cpro.baidustatic.com/cpro/ui/c.js" type="text/javascript"></script><script type="text/javascript" charset="utf-8" src="http://pos.baidu.com/ecom?di=u1339127&amp;dcb=BAIDU_CPRO_SETJSONADSLOT&amp;dtm=BAIDU_CPRO_SETJSONADSLOT&amp;dai=2&amp;jn=3&amp;ltu=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;liu=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;ltr=&amp;ps=667x910&amp;psr=1280x1024&amp;par=1280x1024&amp;pcs=1035x927&amp;pss=1210x1293&amp;pis=1035x927&amp;cfv=11&amp;ccd=24&amp;col=en-US&amp;coa=&amp;cec=GBK&amp;tpr=1376801689335&amp;kl=&amp;dis=16"></script><div style="display:none">-</div> <iframe id="cproIframe2" src="http://cpro.baidu.com/cpro/ui/uijs.php?rs=0&amp;tu=u1339127&amp;tn=text_default_300_250&amp;n=yingjiesheng_cpr&amp;adn=3&amp;rsi1=250&amp;rsi0=300&amp;rad=&amp;rss0=%23dadada&amp;rss1=%23FFFFFF&amp;conOP=0&amp;rss2=%230066cc&amp;rss3=%23666666&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rsi5=4&amp;ts=1&amp;at=65&amp;ch=0&amp;cad=1&amp;aurl=&amp;rss7=&amp;cpa=1&amp;fv=11&amp;cn=0&amp;if=16&amp;word=http%3A%2F%2Fmy.yingjiesheng.com%2Fjob_310147.html&amp;refer=&amp;ready=1&amp;jk=198ac77c94b1e310&amp;jn=3&amp;lmt=1376772889&amp;csp=1280,1024&amp;csn=1280,1024&amp;ccd=24&amp;chi=2&amp;cja=true&amp;cpl=12&amp;cmi=89&amp;cce=true&amp;csl=en-US&amp;did=2&amp;rt=10&amp;dt=1376801690&amp;pn=1|baiduCustSTagLinkUnit|103&amp;ev=50331648&amp;c01=0&amp;prt=1376801689335&amp;i3=f&amp;anatp=0&amp;stid=0&amp;lunum=6&amp;scale=&amp;skin=&amp;xuanting=1" width="300" height="250" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" baiduxuanting="baiduCproXuantingRoof"></iframe>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ <script type="text/javascript">
179
+ function index_log_user(c_name){
180
+ if(document.cookie.length>0){
181
+ c_start=document.cookie.indexOf(c_name + "=")
182
+ if(c_start!=-1){
183
+ c_start=c_start + c_name.length+1
184
+ c_end=document.cookie.indexOf(";",c_start)
185
+ if(c_end==-1) c_end=document.cookie.length
186
+ return unescape(document.cookie.substring(c_start,c_end))
187
+ }
188
+ }
189
+ return "";
190
+ }
191
+ function index_load_script(url){
192
+ document.writeln("<scr"+"ipt type='text/javascript' src='"+url+"'></sc"+"ript>");
193
+ }
194
+ var index_login_user = index_log_user('wespaceuser');
195
+ if(index_login_user!=null && index_login_user.length>1){
196
+ index_load_script('/index.php/personal/invite_notice_js/?jobshow=1');
197
+ }
198
+ </script>
199
+ <iframe width="0" height="0" id="ajaxform" name="ajaxform" style="display:none;"></iframe>
200
+ <script src="/index.php/display/jobview/310147.htm" language="javascript" type="text/javascript"></script>
201
+ <script src="/globals/scripts/extents.js" language="javascript" type="text/javascript"></script><div id="titlealtlayer" style="position:absolute;z-index:1000;padding:4px;font-size:12px;border:1px solid #000;background-color:#ffc;display:none;"></div>
202
+ <div class="com_foot box clearfix">
203
+ <a href="http://www.yingjiesheng.com/" target="_blank">应届生求职网</a> | <a href="http://www.yingjiesheng.com/about/partner/index.html">合作伙伴</a> | <a href="http://www.yingjiesheng.com/about/company.html">企业免费注册说明</a> | <a href="http://www.yingjiesheng.com/">帮助指南</a> | <a href="http://link.yingjiesheng.com/">友情链接</a> | <a href="http://www.yingjiesheng.com/about/about.html">联系我们</a><br>应届生求职网(<a href="http://www.yingjiesheng.com/">YingJieSheng.COM</a>) © 2005—2013 All Right Reserved
204
+ </div>
205
+ <script language="javascript" src="/globals/scripts/jquery_my_function.js"></script>
206
+ <script type="text/javascript" src="/globals/scripts/jquery_list_function.js"></script>
207
+ <!-- Baidu Button BEGIN -->
208
+ <script type="text/javascript" id="bdshare_js" data="type=slide&amp;img=1&amp;uid=11526" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=382445"></script>
209
+
210
+ <script type="text/javascript">
211
+ document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + new Date().getHours();
212
+ </script>
213
+ <!-- Baidu Button END -->
214
+ <span style="display:none"><script language="javascript" src="http://count15.51yes.com/click.aspx?id=156561790&amp;logo=5"></script><a href="http://countt.51yes.com/index.aspx?id=156561790" target="_blank"><img width="20" height="20" border="0" hspace="0" vspace="0" src="http://count15.51yes.com/count5.gif" alt="51YES网站统计系统"></a><iframe marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" src="http://count15.51yes.com/sa.htm?id=156561790&amp;refe=&amp;location=http%3A//my.yingjiesheng.com/job_310147.html&amp;color=24x&amp;resolution=1280x1024&amp;returning=0&amp;language=undefined&amp;ua=Mozilla/5.0%20%28X11%3B%20Linux%20x86_64%29%20AppleWebKit/537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome/28.0.1500.95%20Safari/537.36" height="0" width="0"></iframe><script language="javascript" src="http://count18.51yes.com/click.aspx?id=183141866&amp;logo=5"></script><a href="http://countt.51yes.com/index.aspx?id=183141866" target="_blank"><img width="20" height="20" border="0" hspace="0" vspace="0" src="http://count18.51yes.com/count5.gif" alt="51YES网站统计系统"></a><iframe marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" src="http://count18.51yes.com/sa.htm?id=183141866&amp;refe=&amp;location=http%3A//my.yingjiesheng.com/job_310147.html&amp;color=24x&amp;resolution=1280x1024&amp;returning=0&amp;language=undefined&amp;ua=Mozilla/5.0%20%28X11%3B%20Linux%20x86_64%29%20AppleWebKit/537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome/28.0.1500.95%20Safari/537.36" height="0" width="0"></iframe></span>
215
+
216
+
217
+ </body></html>