来到这边工作上的机器一直是ubuntu,没有发现有比较好的管理ssh帐号密码的工具,机器多了管理起来是比较蛋疼的。
俗话说的好,挠自己的痒处,于是就写了一个简单的小脚本,用于管理ssh主机。
...(Check the rest part)
|
Tag : python
|
|
Dec
07
Type: 技术相关
|
|
来到这边工作上的机器一直是ubuntu,没有发现有比较好的管理ssh帐号密码的工具,机器多了管理起来是比较蛋疼的。 俗话说的好,挠自己的痒处,于是就写了一个简单的小脚本,用于管理ssh主机。 ...(Check the rest part) |
|
Views: (231) | Comments: (1)
|
|
Sep
09
Type: 技术相关
|
|
简介: Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 ...(Check the rest part) |
|
Views: (806) | Comments: (0)
|
|
Aug
15
Type: 技术相关
|
|
前段时间浮云脱水小说站的pv大涨(将近2W了),查看来源后发现是由一个贴吧用户的回帖宣传带来了很多流量。于是为了能够早日拿到adsense里面的那100美刀,终于决定自己也出马去百度贴吧发帖宣传了。 下面这个脚本是一个土鳖的百度贴吧的发帖/回复脚本,完全没有做验证码识别方面的工作,改由wxpython生成界面弹出由人眼识别= =|。 ...(Check the rest part) |
|
Views: (961) | Comments: (4)
|
|
Jun
27
Type: 技术相关
|
|
NERDTree是VIM的一个很好用的目录树插件,它提供了一项书签的功能。 比如使用 :Bookmark xxx 可以为当前目录标记为名称为xxx的书签,之后使用 :BookmarkToRoot xxx 命令即可直接跳到该目录下。 ...(Check the rest part) |
|
Views: (712) | Comments: (2)
|
|
Jan
25
Type: 技术相关
|
|
好吧,我承认我是对晚上看到一张合适的票转让但打过电话去说已经被搞走了这件事情感到蛋疼。直接上文件吧。
#coding: utf-8
'''
春运查询火车票转让信息
Author: piglei2007@gmail.com
Date: 2011.01.25
'''
import re
import os
import time
import urlparse
import datetime
import traceback
import urllib2
import socket
socket.setdefaulttimeout(20)
BLANK_RE = re.compile(r"\s+")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
opener.addheaders = [
("User-agent", "Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.1) Gecko/20090704 Firefox/3.5"),
("Accept", "*/*"),
]
urllib2.install_opener(opener)
from BeautifulSoup import BeautifulSoup
SOURCE = {
"58": "http://bj.58.com/huochepiao/?Num=%(train)s&StartTime=%(date)s00",
"ganji": "http://bj.ganji.com/piao/cc_%(train)s/%(date)s/",
}
RECORD_FILE = "/tmp/ticket_records.txt"
def parse_record():
try:
return set([x.strip() for x in open(RECORD_FILE, "r").readlines()])
except IOError:
open(RECORD_FILE, "w")
return set()
def flush_record(records):
open(RECORD_FILE, "w").write("\n".join(records))
def main(config):
"""
开始抓取
"""
existed = parse_record()
to_email = []
for train in config["trains"]:
for date in config["dates"]:
for type, _url in SOURCE.items():
url = _url % dict(train=train, date=date)
content = urllib2.urlopen(url).read()
soup = BeautifulSoup(content)
result = parse_content(type, soup, train)
for url, text in result:
url = urlparse.urljoin(_url, url)
# 只要卧铺!
if url not in existed and u"卧" in text:
to_email.append([text, url])
existed.add(url)
if to_email:
content = "".join(
[x for x in [" | ".join(y) for y in to_email]]
).encode("utf-8")
simple_mail(config["people"], content)
flush_record(existed)
def parse_content(type, soup, train):
"""
获得车次信息
"""
result = []
if type == "58":
info_table = soup.find("table", id="infolist")
if info_table:
for x in info_table.findAll("tr", text=re.compile(ur"%s(?!时刻表)" % train, re.I)):
a = x.parent
_text = BLANK_RE.sub("", a.text)
result.append([a["href"], _text])
if type == "ganji":
for x in soup.findAll("dl", {"class": "list_piao"}):
a = x.dt.a
result.append([a["href"], a.text])
return result
EMAIL_HOST = 'smtp.sohu.com'
EMAIL_HOST_USER = 'yourname@sohu.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
EMAIL_PORT = 25
def simple_mail(to, content):
"""
发送邮件
"""
import smtplib
from email.mime.text import MIMEText
msgRoot = MIMEText(content, 'html', 'UTF-8')
msgRoot['Subject'] = "[%s]有票来啦!!!!" % datetime.datetime.today().isoformat(" ")
msgRoot['From'] = EMAIL_HOST_USER
msgRoot['To'] = ", ".join(to)
s = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT)
s.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
s.sendmail(EMAIL_HOST_USER, to, msgRoot.as_string())
s.close()
def switch_time_zone():
"""
切换时区
"""
os.environ["TZ"] = "Asia/Shanghai"
time.tzset()
switch_time_zone()
if __name__ == '__main__':
config = {
"trains": ("k471",),
"dates": ("20110129",),
"people": (
"youremail@sohu.com",
)
}
try:
main(config)
print "%s: ok" % datetime.datetime.today()
except Exception, e:
print traceback.format_exc()
...(Check the rest part) |
|
Views: (945) | Comments: (2)
|