我要搬家到csdn,大家到那里来看我吧,平台更大,看到的人更多!
ruby代码
#encoding: utf-8 require 'net/http'
require 'open-uri'
require 'nokogiri' # 用于解析html的模块
# sudo apt-get install libxslt-dev libxml2-dev
# sudo gem install nokogiri
require 'pathname' class JanDanSpider
attr_accessor :base_uri, :cur_page # 定义属性访问器 def initialize(pagesize)
@base_uri = 'http://jandan.net/pic' # @表示实例变量、@@表示类变量、$表示全局变量
@dir = '/media/Develop/MyCode/SevenLang/ruby/pic'
@pagesize = Integer(pagesize) # 整型转换
end def crawl()
Dir.mkdir @dir unless File.directory? @dir # 表判断的方法结尾都有个?
totalpage = crawlpage(0)
puts "pagesize #{totalpage}" # ""字符会引发字符串替换,''则不会
(1..@pagesize-1).each do |i| # 遍历元组
crawlpage(totalpage - i)
end
puts 'complete!'
end def crawlpage(page)
url = page==0 ? @base_uri : @base_uri+'/page-'+page.to_s # to_s是必要的
puts "crawl-page: #{url}" fpage = open(url)
html = fpage.read
doc = Nokogiri::HTML(html)
doc.css('ol.commentlist li').each { |comment|
match = /comment-(\d+)/.match(comment['id'])
if match
id = match[1]
oo = Integer(comment.css('#cos_support'+'-'+id)[0].content);
xx = Integer(comment.css('#cos_unsupport'+'-'+id)[0].content);
xx = 1 if xx==0
if(oo>xx && (oo>200 || oo/xx >10) )
src = comment.css('p img')[0]["src"]
puts "crawl: oo #{oo} xx #{xx} src #{src}"
save_pic(src)
end
end
}
if page==0
cur_page = doc.css(".current-comment-page")[0].content
page = Integer(/\d+/.match(cur_page).to_s)
end
puts "page #{page} done!"
page # ruby中每条语句都有返回值,函数内最后一条语句的返回值会被return
end def save_pic(url)
urlpath = Pathname.new(url)
filename = urlpath.basename.to_s
dirpath = Pathname.new(@dir)
filepath = dirpath.join(filename).to_s
open(url) { |fin|
open(filepath,"wb") { |fout|
while buf = fin.read(4096) do
fout.write buf
end
}
} unless File.exists? filepath # 仅当文件不存在时进行抓取
puts 'done!'
end end if ARGV.length == 1
spider = JanDanSpider.new($*[0]) # 可从 ARGV 或 $* 读取命令行参数
spider.crawl()
else
puts 'please input pagesize' #tip: puts, 转义+换行符 print, 转义 p, 换行
end
python
#python-string
#python中的字符串用单引号''和双引号""标示
strA = 'this is a string'
strB = "this is a message!" #打印两个字符串
print("打印两个字符串")
print('strA = ' + strA)
print('strB = ' + strB) print("#############################") strC = 'I don\'t know anything'
strD = '\'Yes\',I know.' print("字符串中的转移字符")
print('strA = ' + strC)
print('strB = ' + strD) print("#############################") strE = '这是我的blog,欢迎大家来\n我的博客园溜达' print("字符串中的换行")
print('strA = ' + strE) print("#############################") strF = 'this is ''message'
strG = 'Hongten'
strH = strG * 3 print('字符串可以用\'+\'号连接(或者说粘合),也可以用\'*\'号循环')
print('strF原有形式为:\'this is \'\'message\'')
print('粘合后的strF:' + strF)
print('strG原值为:\'Hongten\',strH = strG * 3,此时strH为:' + strH) print("#############################")
strI = 'hongtenzone@foxmail.com' print('字符串可以使用下标(索引)查询')
print('源字符串strI = \'hongtenzone@foxmail.com\'')
print('字符串strI的长度,len(strI) = ')
print(len(strI))
print('strI[0] = ' + strI[0])
print('strI[10] = ' + strI[10])
print('strI[-1] = strI[len(strI) - 1]')
print('strI[-1] = ' + strI[-1])
print('strI[len(strI) - 1] = ' + strI[len(strI) - 1]) print("#############################") print('Python 字符串不能改写。按字符串索引赋值会产生错误:')
print('strI[0] = \'x\',这样就会产生错误啦') print("#############################") print('过大的索引代替为字符串大小,下界比上界大的返回空字符串')
print('strI[0:100] = ' + strI[0:100]) print("#############################") print('索引可以是负数,计数从右边开始')
print('strI[-2] = ' + strI[-2])
print('strI[-23:] = ' + strI[-23:]) print("#############################") print('不过-0 还是0,所以它不是从右边计数的!')
print('strI[0] = ' + strI[0])
print('strI[-0] = ' + strI[-0])
java
/*
* PROXY_HOST:代理的IP地址
* PROXY_PORT_INT:代理的端口号
*/
Proxy proxy=newProxy(Proxy.Type.HTTP, newInetSocketAddress(PROXY_HOST, PROXY_PORT_INT));
URL url=newURL(urlStr);
URLConnection conn=url.openConnection(proxy);
InputStream is=conn.getInputStream();
html5js
/**
* 这里只实现垂直滚动
*/
var parent = document.getElementById('parent');
var content = document.getElementById('content')
var startY = 0; // 初始位置
var lastY = 0; // 上一次位置 parent.addEventListener('touchstart', function(e) {
lastY = startY = e.touches[0].pageY;
});
parent.addEventListener('touchmove', function(e) {
var nowY = e.touches[0].pageY;
var moveY = nowY - lastY;
var contentTop = content.style.top.replace('px', '');
// 设置top值移动content
content.style.top = (parseInt(contentTop) + moveY) + 'px';
lastY = nowY; });
parent.addEventListener('touchend', function(e) {
// do touchend
var nowY = e.touches[0].pageY;
var moveY = nowY - lastY;
var contentTop = content.style.top.replace('px', '');
// 设置top值移动content
content.style.top = (parseInt(contentTop) + moveY) + 'px';
lastY = nowY;
});
/**
* 这里只实现垂直滚动
*/
var parent = document.getElementById('parent');
var content = document.getElementById('content')
var startY = 0; // 初始位置
var lastY = 0; // 上一次位置 parent.addEventListener('touchstart', function(e) {
lastY = startY = e.touches[0].pageY;
});
parent.addEventListener('touchmove', function(e) {
var nowY = e.touches[0].pageY;
var moveY = nowY - lastY;
var contentTop = content.style.top.replace('px', '');
// 设置top值移动content
content.style.top = (parseInt(contentTop) + moveY) + 'px';
lastY = nowY; });
parent.addEventListener('touchend', function(e) {
// do touchend
var nowY = e.touches[0].pageY;
var moveY = nowY - lastY;
var contentTop = content.style.top.replace('px', '');
// 设置top值移动content
content.style.top = (parseInt(contentTop) + moveY) + 'px';
lastY = nowY;
});
我要搬家到csdn,大家到那里来看我吧,平台更大,看到的人更多!的更多相关文章
- 博客搬家到CSDN:http://blog.csdn.net/yeweiouyang
博客搬家到CSDN:http://blog.csdn.net/yeweiouyang
- 搬家至csdn
搬家至csdn https://blog.csdn.net/qq_42866164
- 96、搬家到csdn
大家好: 今天开始会将所有的博客搬家到CSDN,以后请参考CSDN上的博客:http://blog.csdn.net/u012416045 谢谢 维真
- 原创内容搬家到csdn博客啦~
以后原创的文章就发布在csdn博客啦: http://blog.csdn.net/aceyan0718 这里就用来当作一个网络笔记本吧,转载些优质的内容
- 将搬家至CSDN
emmm,感觉没利用好博客,自己也弄了一个github上面的hexo博客https://clarkkun.github.io/,但是死活传不上去内容,尴尬 ̄□ ̄||,三个博客齐头并进吧
- JVM原理和优化
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...
- jvm 原理和优化
在csdn 上看到的,觉得很好,收藏了: 原博文地址: 濤子 http://blog.csdn.net/ning109314/article/details/10411495/ JVM工作原理和特点主 ...
- JVM知识学习与巩固
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调 ...
- TCP/IP 三次握手和四次握手
三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己 ...
随机推荐
- Python dict get items pop update
一.get方法 dict = {'k1':1,'k2':2} dict.get('k1') 1 dict.get('k2') 2 dict.get('k3') None dict.get('k3',' ...
- 第二章HTML,JavaScript简介
概念: URL:网上标准资源的地址. HTTP协议:客户端发出请求和得到回应的标准协议. HTML:超文本标记语言.是网络上的通用语言,也是网络web语言基础. 2.1服务器与浏览器 举个例子:A同学 ...
- C++ 的static 与 const
1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化. 2.static const的成员变量 ...
- 自适应阈值二值化之最大类间方差法(大津法,OTSU)
最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间 ...
- C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具
写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额.(写 core 的经验了)有很多同学一见到 core 就两眼一抹黑,不知所措了.笔者 入"坑&quo ...
- js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- MySQL基础之数据类型和运算符
早些年学习MySQL的笔记,发在博客园上,以便后续回顾学习: 1. 数据类型为int(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数.其他数据类型也可 ...
- 2-sat-总结+例题
https://www.cnblogs.com/31415926535x/p/10644419.html 从寒假就开始准备学2sat,,然后当时了解了一下模板就溜了,,,一直到上个星期,,三月底才好好 ...
- web 连接池配置
TOMCAT J2EE项目连接池配置 web 项目的 web.xml <web-app> <resource-ref> <description>DB Connec ...
- C#种将String类型转换成int型
API: 有一点是需要注意的,那就是必须保证该String类型内全为数字,能确保转换正确: 1.int.Parse(str); 2.TryParse(str, out intA); 3. Conver ...