5月 20

vsftp 自用配置

直接用yum安装vsftp非常简单,然后将配置拷贝到配置文件中重启即可,自用配置在这做个记录。
配置文件/etc/vsftpd/vsftpd.conf
配置如下
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#chroot_local_user=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
idle_session_timeout=600
data_connection_timeout=120
ls_recurse_enable=NO
pam_service_name=vsftpd
userlist_enable=YES
ftpd_banner=Welcome to blah FTP service.
max_clients=10
max_per_ip=3
use_localtime=YES
listen=YES
tcp_wrappers=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list

然后手动建立/etc/vsftpd/vsftpd.chroot_list
将系统中可以用来登录ftp的账户放在里面。
注意:ftp账户也可以有操作系统登录权,所以登录用户需要规划。

5月 16

tomcat7 虚拟主机

  之前一直在用tomcat5,现在用tomcat7,幸好配置没有变化,把几处重要的配置写出来,备忘。
  需求1)tomcat做连接优化。
2)tomcat下的默认使用ROOT,message.simonzhang.net的域名,使用tomcat,webapps下的message

修改一、

    

修改二、

      
        
      
      
      
        
      

需要注意compressableMimeTy配置,tomcat前端有nginx或者apace等服务如果已经启动了压缩的处理,这里就不用配置了。。

5月 15

tomcat 日志切割

日志自动切割以前使用cronolog进行,apache为http://www.simonzhang.net/?p=362,tomcat为http://www.simonzhang.net/?p=359。
但是tomcat7 以后启动叫脚本改了,也就不麻烦了,直接自己写个shell解决,此脚本会丢失少量正在切割时产生的日志。

#!/bin/sh
log_dir=("/program/allweb/tomcat_a/logs" "/program/allweb/tomcat/logs")
for (( i=0 ; i<${#log_dir[@]} ; i++ ))
do
    if [ -f ${log_dir[i]}\/catalina.out ]; then
        cd ${log_dir[i]}
        date_dir=`date +%Y-%m-%d`
        /bin/cp catalina.out  catalina_${date_dir}.out
        /bin/echo '' > catalina.out
        /usr/bin/find -ctime +15 -exec rm -rf {} \;
    fi
done
5月 13

scrapy 入门 学习笔记 二

scrapy 入门 学习笔记 二

  蜘蛛抓回数据需要进行分析。首先要了解一下XPath。XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。XPath 是 W3C 标准,有空再学习吧。简单看一下html dom(Document Object Model)的文档对象模型.

  首先用scrapy shell 进行交互式解析的实验使用命令如下:
# scrapy shell http://www.simonzhang.net/

获得数据并进入shell中
<......>DEBUG: Crawled (200) (referer: None)
[s] Available Scrapy objects:
[s] hxs

  修改代码,来抓取头文件中的连接。代码如下:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector


class   DmozSpider (BaseSpider): 
      name  =  "simonzhang" 
      allowed_domains = ["simonzhang.net"] 
      start_urls = [ 
           "http://www.simonzhang.net/"] 

      def  parse (self,response): 
           hxs = HtmlXPathSelector(response)
           site_code = hxs.select('//html/head')
           for l in site_code:
               _link = l.select('link/@href').extract()
               print "================"
               print _link
               print "================"

  运行蜘蛛,得到的抓取的结果。获得的结果需要保存,这时就用到item。item对象是python的字典,将字段和值进行关联。编辑spiders上层的items.py文件。

from scrapy.item import Item, Field

class ScrapytestItem(Item):
    # define the fields for your item here like:
    # name = Field()
    title =  Field()
    head_link = Field()
    head_meta = Field()
    pass

  然后需要修改蜘蛛文件,代码为:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector
from simonzhang.items import ScrapytestItem  #ScrapytestItem引用上级目录里的类

class   DmozSpider (BaseSpider): 
    name = "simonzhang" 
    allowed_domains = ["simonzhang.net"] 
    start_urls = [ 
         "http://www.simonzhang.net/"] 

    def  parse (self,response): 
         hxs = HtmlXPathSelector(response)
         site_code = hxs.select('//html/head')
         items = []
         for l in site_code:
             item = ScrapytestItem()
             item['title'] = l.select('title/text()').extract()
             item['head_link'] = l.select('link/@href').extract()
             item['head_meta'] = l.select('meta').extract()
             items.append(item)
         return items 

  运行一下命令进行抓取,成功后就会在同级目录产生一个json的文件,里面保存的是抓取的内容。对于抓取小型的项目足够用了。
scrapy crawl simonzhang -o simonzhang.json -t json

  上条命令里的“-o”为指定输出文件,“-t”为指定输出格式,更多的参数,可以使用“scrapy crawl –help”参考。

scrapy 入门 学习笔记 一
http://www.simonzhang.net/wp-admin/post.php?post=1108&action=edit

5月 06

scrapy 学习笔记 一

  很多python开发都在用scrapy框架开发抓取,我也算学习一下。虽然笔记序号为一,但是能不能坚持下去还不知道,写着看吧。官方网址:http://scrapy.org/。官方接受scrapy是纯python做的高效的web抓取框架,网络爬虫,后提取相关页面的数据。scrapy可以用于数据挖掘、监控和自动化测试等工作。据说google的大部分爬虫也是用python写的,但是不知道是否用了这个框架。可以肯定的是,这个框架能做很多事、很大,我只会用到很简单一部分。我做笔记是为自己学习记录,既不系统也不全面,建议大家到官方下载pdf的文档,进行学习,我也是通过pdf文档学习,并使用其中的例子修改为自己的形成笔记。为了不引起争议,直接用自己的站进行抓取学习。
  开始学习了,linux的环境,是CentOS5,windows的环境是win7,python都是2.6,因为scrapy支持2.6、2.7,不支持3.X。直接使用easy_install安装,但是windows上安装的是0.14.3,linux上安装的0.12,官方网站上最新的开发版本是0.15。不知道为什么差距这么大。为了方便学习直接手动下载0.15,安装到linux上。

tar zxf Scrapy-X.X.X.tar.gz
cd Scrapy-X.X.X
python setup.py install

  在linux上安装有警告,关于ssl的,如下

Running pyOpenSSL-0.13/setup.py -q bdist_egg –dist-dir /tmp/easy_install-rx8P0H/pyOpenSSL-0.13/egg-dist-tmp-g7Da22
warning: no previously-included files matching ‘*.pyc’ found anywhere in distribution
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_context’:
OpenSSL/ssl/connection.c:289: 警告:隐式声明函数 ‘SSL_set_SSL_CTX’
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_get_servername’:
OpenSSL/ssl/connection.c:313: 错误:‘TLSEXT_NAMETYPE_host_name’ 未声明 (在此函数内第一次使用)
OpenSSL/ssl/connection.c:313: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
OpenSSL/ssl/connection.c:313: 错误:所在的函数内只报告一次。)
OpenSSL/ssl/connection.c:320: 警告:隐式声明函数 ‘SSL_get_servername’
OpenSSL/ssl/connection.c:320: 警告:赋值时将整数赋给指针,未作类型转换
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_tlsext_host_name’:
OpenSSL/ssl/connection.c:346: 警告:隐式声明函数 ‘SSL_set_tlsext_host_name’
error: Setup script exited with error: command ‘gcc’ failed with exit status 1

  直接下载pyopenssl后安装,
http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.12.tar.gz

  再执行 easy_install -U scrapy,安装成功。
  在windows上除了安装pyopenssl还要w3lib、Twisted,但是处理比较简单,直接easy_install安装,如:C:\Python26\Scripts>easy_install.exe pyopenssl。
  环境搭建完成,毕竟使用的linux服务器,所以还是在linux上学习。开始创建一个抓取项目,项目名为scrapytest.
>scrapy startproject simonzhang
创建项目完毕,目录树如下,:

simonzhang
│  scrapy.cfg               # 整个目录的配置
│
└─simonzhang                # 项目模块,代码都放在这
    │  items.py             # 项目的items文件,相当于格式化抓取的内容,以字典形式返回
    │  pipelines.py         # 项目的pipelines,管理通道,主要是对抓取网页后的数据清洗、验证和入库
    │  settings.py          # 项目的设置文件,
    │  __init__.py
    │
    └─spiders             # 这个目录放的是蜘蛛文件,
            __init__.py

  进入simonzhang目录,编辑simonzhang/items.py

from scrapy.item import Item, Field

class ScrapytestItem(Item):
    # define the fields for your item here like:
    # name = Field()
    title =  Field()
    link = Field()
    desc = Field()
    pass

  编写第一个蜘蛛simonzhang/spiders/frist_simonzhang.py

from   scrapy.spider      import   BaseSpider 

class   DmozSpider (BaseSpider): 
      name  =  "simonzhang_net"     # 蜘蛛的名字,一个项目下每个蜘蛛名字必须是唯一的
      allowed_domains = ["simonzhang.net"] 
      start_urls = ["http://www.simonzhang.net/"]  #下载列表,注意域名后面需要一个“/”因为稍后会用于截取文件名

      def  parse (self,response):   # 抓取和保存的方法
           filename    =  response.url.split("/")[2] 
           open (filename, 'wb').write(response .body)

  进入simonzhang/simonzhang/spiders目录运行下面命令:
scrapy crawl simonzhang_net
  运行完毕,看到目录下已经有一个www.simonzhang.net的文件,打开文件可以看到是抓取为首页的文件。

scrapy 学习笔记 二
http://www.simonzhang.net/?p=1112