1.jdk的安装
2.nginx的安装
3.tomcat的安装
4.mysql的安装
5.scrapy的安装
6.mongodb的安装
作为爬虫工程师,Linux工程师,系统管理员,软件的部署安装是必备技能。下面是我在工作学习中的总结,希望对网友们有所借鉴和帮助。
环境:
阿里云服务器 CentOS7.0
一.JDK的安装
1.查看linux机器是32位还是64位的方法:
$ getconf LONG_BIT
64
2.下载对应系统的jdk版本 linux 64bit jdk1.8
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3.安装正式开始:
创建安装目录,在/usr/java下建立安装路径,并将文件考到该路径下:
# mkdir /usr/java
1、jdk-6u11-linux-i586.bin 这个是自解压的文件,在linux上安装如下:
# chmod 755 jdk-6u11-linux-i586.bin
# ./jdk-6u11-linux-i586.bin (注意,这个步骤一定要在jdk-6u11-linux-i586.bin所在目录下)
在按提示输入yes后,jdk被解压。
出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。
2、若是用jdk-6u11-linux-i586-rpm.bin 这个也是一个自解压文件,不过解压后的文件是jdk-6u11-linux-i586-rpm 包,执行rpm命令装到linux上就可以了。安装如下:
#chmod 755 ./jdk-6u11-linux-i586-rpm
# ./jdk-6u11-linux-i586-rpm .bin
# rpm -ivh jdk-6u11-linux-i586-rpm
出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 "yes" 回车。
安装软件会将JDK自动安装到 /usr/java/目录下。
4.配置
#vi /etc/profile
在里面添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_27
export JAVA_BIN=/usr/java/jdk1.6.0_27/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
让/etc/profile文件修改后立即生效 ,可以使用如下命令:
# . /etc/profile
注意: . 和 /etc/profile 有空格.
重启测试
java -version
屏幕输出:
java version "jdk1.6.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build jdk1.6.0_02)
Java HotSpot(TM) Client VM (build jdk1.6.0_02, mixed mode)
javac
会打印出一些帮助信息,说明安装配置成功
二.Nginx:
参考url:http://www.linuxidc.com/Linux/2015-03/114988.htm
参考url:http://www.linuxidc.com/Linux/2015-03/114986.htm
1. 从Nginx官网下载Nginx。目前最新的稳定版为:1.6.2
2. 将下载下来的Nginx上传到/opt/nginx目录下。运行“tar -zxvf nginx-1.6.2.tar.gz”进行解压。
3. 切换到/opt/nginx/nginx-1.6.2目录下,运行./configure进行初始化配置。如出现下面的提示,说明该机器没有安装PCRE,而Nginx需要依赖PCRE,需要手动安装PCRE,见 http://www.linuxidc.com/Linux/2015-03/114986.htm。
4. 安装完PCRE后,再次运行./configure进行初始化即可。注意这里生成的配置文件,尤其箭头所指的方向,是启动nginx时的路径。
5. 运行 make install 进行编译。
6. 切换到步骤4生成的nginx运行目录下,运行./nginx,启动Nginx。
如出现下面所述的错误,在已安装PCRE库的情况下,需要配置PCRE共享库。具体操作看这里 http://www.linuxidc.com/Linux/2015-03/114985.htm 。
./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
7. 在浏览器中输入IP:端口号,出现如下图所示,说明安装成功。
如出现nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)。可能是端口号被占用,切换到/usr/local/nginx/conf/目录下,更改nginx.conf下的端口号。也有可能是不小心nginx重启了多次,关闭nginx进程,重启即可。
8. 关闭Nginx
使用 ps -ef|grep nginx 查看nginx的进程,可以看到nginx有两个进程:
[root@linuxidc sbin]# ps -ef|grep nginx
root 7276 1 0 14:21 ? 00:00:00 nginx: master process ./nginx
www 7277 7276 0 14:21 ? 00:00:00 nginx: worker process
root 7279 5197 0 14:21 pts/1 00:00:00 grep nginx
8.1 从容停止nginx
kill - QUIT nginx 主进程号
8.2 停止nginx所有进程
[root@linuxidc sbin]# pkill -9 nginx
三.Tomcat的安装
1.下载tomcat(http://tomcat.apache.org/)
2.解压缩
[root@master ~]# unzip apache-tomcat-6.0.30.zip
[root@master ~]# mv apache-tomcat-6.0.30/ /usr/local/
[root@master ~]cd /usr/local/
[root@master local]# ln -s /usr/local/apache-tomcat-6.0.30/ /usr/local/tomcat
[root@master local]# cd tomcat/bin/
[root@master bin]#ls
[root@master bin]#vim catalina.sh
添加以下内容:
CATALINA_HOME=/usr/local/apache-tomcat-6.0.30/
[root@master local]#chmod +x *.sh
3.启动tomcat服务器
[root@master tomcat]# /usr/local/tomcat /bin/catalina.sh start
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.30/
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.30/
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.30//temp
Using JRE_HOME: /usr/local/jdk1.6.0_05
Using CLASSPATH: /usr/local/apache-tomcat-6.0.30//bin/bootstrap.jar
[root@master logs]# cd /usr/local/tomcat/logs/
[root@master logs]# tail -f catalina.out
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Jul 4, 2011 11:06:57 AM org.apache.coyote.http11.Http11Protocol pause
INFO: Pausing Coyote HTTP/1.1 on http-8080
Jul 4, 2011 11:06:58 AM org.apache.catalina.core.StandardService stop
INFO: Stopping service Catalina
Jul 4, 2011 11:06:58 AM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
4.在浏览器中输入
http://localhost:8080/(如果不是本机,则输入对应的ip地址)
测试出现tomcat页面则测试成功
ps:需要说明的是tomcat的默认测试页面是放在webapps下面,这个其实是在server.xml文件中配置的,如下所示:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
[root@SOR_SYS apache-tomcat-6.0.30]# ls
LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf lib logs temp webapps work
1)webapps文件夹主要用于web应用程序部署,比如你可以把你的应用程序包,如war文件拷到该目录下,容器会自动部署。
2)conf文件夹下主要是放置tomcat的服务器的相关配置文件
5.添加应用,再次进行测试
在webapps目录下放测试包(注意:webaapps目录下面主要是放应用包的.war在tomcat重启访问后会自动解压)
[root@master webapps]# pwd
/usr/local/tomcat/webapps
[root@master webapps]# tar -zxvf moni2.tar.gz
[root@master webapps]# ls
docs examples host-manager manager moni2 moni2.tar.gz ROOT
[root@master webapps]# /usr/local/tomcat/bin/catalina.sh start(重启tomcat)
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.30/
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.30/
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.30//temp
Using JRE_HOME: /usr/local/jdk1.6.0_05
Using CLASSPATH: /usr/local/apache-tomcat-6.0.30//bin/bootstrap.jar
在浏览器中输入如下地址:
http://192.168.55.229:8080/moni2/
6.修改tomcat的监听端口
[root@master ~]# cd /usr/local/tomcat/conf
[root@master ~]# ls
[root@master ~]# vim server.xml
<Server port="8005" shutdown="SHUTDOWN">【停止tomcat时的端口】
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> 【tomcat默认的监听端口是8080,现在改成8081】
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />【apache+tomcat模式时访问tomcat的端口】
现在重启tomcat。访问http://192.168.55.229:8081/moni2/【注意:这时就需要修改端口了,嘿嘿。。。】
四.MySQL的安装
在Linux中安装MySQL,通常为RPM与源码方式安装。对于生产环境而言,由于需要自定义诸如安装路径、数据文件位置、字符集以及支持的存储引擎等多以源码方式来进行安装。之前有写过一篇关于源码安装的文章,Linux下基于源码方式安装MySQL 5.6(http://www.linuxidc.com/Linux/2014-10/108040.htm),但不是很完整,因此该文可以作为其补充。以下为具体安装步骤,供大家参考。
1、安装前的有关描述
必备的包和工具
gcc/g++ :MySQL 5.6开始,需要使用g++进行编译。
cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本。
bison :MySQL语法解析器需要使用bison进行编译。
ncurses-devel :用于终端操作的开发包。
zlib :MySQL使用zlib进行压缩
功能需要的包
libxml :用于XML输入输出方式的支持。
openssl :使用openssl安全套接字方式通信。
dtrace :用于诊断MySQL问题。
有关MySQL编译参数
CMAKE_BUILD_TYPE 编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化。
CMAKE_INSTALL_PREFIX 指定make install安装的目标路径。
SYSCONFDIR 指定配置文件的默认路径。
MYSQL_DATADIR 指定data目录的默认路径。
WITH_DEBUG 指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭。
ENABLED_PROFILING 指定是否可以使用show profile显示操作执行的详细信息。
DEFAULT_CHARSET 指定默认字符集,可以在启动的配置文件中指定。
DEFAULT_COLLATION 指定默认字符比较、排序的规则。
WITH_EXTRA_CHARSETS 指定其他可能使用的字符集。
WITH_SSL 指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址。
WITH_ZLIB 指定zlib的类型,用于压缩功能。
ENABLED_LOCAL_INFILE 指定是否允许使用load data infile功能。
WITH_EMBEDDED_SERVER 指定是否编译libmysqld嵌入式库。
INSTALL_LAYOUT 指定安装的布局类型。
WITH_storage_STORAGE_ENGINE 指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎。
更多详细参数可参考 http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html
本次安装环境
[root@SZ-RD03 ~]# cat /etc/issue
CentOS release 5.9 (Final)
Kernel \r on an \m
[root@SZ-RD03 ~]# uname -a
Linux SZ-RD03 2.6.18-348.el5 #1 SMP Tue Jan 8 17:53:53 EST 2013 x86_64 x86_64 x86_64 GNU/Linux
MySQL版本:5.6.12-log Source distribution
安装目录为:/app/soft/mysql/
数据目录为:/data/mysqldata
存储引擎包括:MEMORY,MyISAM,InnoDB等
字符集为:UTF8
2、源码安装MySQL
先安装需要用到的库:
yum -y install gcc gcc-c++
yum -y install ncurses-devel
下载所需软件包:
#将下载的文件都放到/usr/local/src目录下,如下
# cd /usr/local/src
# wget http://www.cmake.org/files/v2.8/cmake-2.8.11.1.tar.gz
# wget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.gz
# wget http://www.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/
安装cmake编译器
# cd /usr/local/src
# tar -xvf cmake-2.8.11.1.tar.gz
# cd cmake-2.8.11.1
# ./bootstrap
# make && make install
安装m4
# cd /usr/local/src
# tar -xvf m4-1.4.16.tar.gz
# cd m4-1.4.16
# ./configure && make && make install
安装bison
# cd /usr/local/src
# tar -xvf bison-2.7.tar.gz
# cd bison-2.7
# ./configure && make && make install
创建mysql用户与组,相关目录
# /usr/sbin/groupadd mysql
# /usr/sbin/useradd -g mysql mysql
# mkdir -p /app/soft/mysql
# chown -R mysql:mysql /app/soft/mysql
# mkdir -p /data/mysqldata
# chown -R mysql:mysql /data/mysqldata/
安装mysql
# cd /usr/local/src
# tar -xvf mysql-5.6.12.tar.gz
# export CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
# export CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
# export CXX=g++
# cd mysql-5.6.12
# cmake -DCMAKE_INSTALL_PREFIX=/app/soft/mysql/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=utf8,gbk
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/mysqldata/ -DSYSCONFDIR=/app/soft/mysql/
-DWITH_SSL=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1
# make && make install
初始化数据库
# cd /app/soft/mysql/
# ./scripts/mysql_install_db --user=mysql --ldata=/data/mysqldata
3、安装后的收尾工作
配置运行环境
# vi /etc/profile
# PATH=/app/soft/mysql/bin:/app/soft/mysql/lib:$PATH
# export PATH
# source /etc/profile
创建开机启动
# cp support-files/my-default.cnf /etc/my.cnf #也可以将my.cnf直接复制到安装文件位置
# cp support-files/mysql.server /etc/init.d/mysqld
# chkconfig --level 35 mysqld on
# service mysqld start
查检是否启动成功
netstat -ntlp | grep mysql
设置root密码
# mysqladmin -u root password 'xxx'
登陆账号
# mysql -uroot -pxxx
配置参数
根据系统及业务需求配置my.cnf文件
若出现错误,vim /etc/my.cnf 修改其中的参数
[client]
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
[mysqld]
datadir=/app/soft/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
[mysql]
socket=/var/lib/mysql/mysql.sock
no-auto-rehash
default-character-set=utf8
[mysqldump]
socket=/var/lib/mysql/mysql.sock
[mysqladmin]
socket=/var/lib/mysql/mysql.sock
操作MySql非常简单,就5步骤,如下:
1.进入 mysql:
1
|
/usr/ local /mysql/bin/mysql -u root -p
|
2.使用 mysql库 :
3.查看用户表 :
1
|
SELECT `Host`,` User ` FROM user ;
|
五.Scrapy的安装
参考url:http://www.cnblogs.com/xiaoruoen/archive/2013/02/27/2933854.html
参考url:http://www.coder4.com/archives/3660
Centos下安装Scrapy
Scrapy是一个开源的机遇twisted框架的python的单机爬虫,该爬虫实际上包含大多数网页抓取的工具包,用于爬虫下载端以及抽取端。
安装环境:
安装步骤:
1.下载python2.7 http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
[root@zxy-websgs ~]# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz -P /opt
[root@zxy-websgs opt]# tar xvf Python-2.7.3.tgz
[root@zxy-websgs Python-2.7.3]# ./configure
[root@zxy-websgs Python-2.7.3]# make && make install
验证python2.7安装
[root@zxy-websgs Python-2.7.3]# python2.7
Python 2.7.3 (default, Feb 28 2013, 03:08:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
2.安装setuptools,http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
[root@zxy-websgs ~]# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz -P /opt/
[root@zxy-websgs opt]# tar zxvf setuptools-0.6c11.tar.gz
[root@zxy-websgs setuptools-0.6c11]# python2.7 setup.py install
3.安装Twisted
[root@zxy-websgs setuptools-0.6c11]# easy_install Twisted
......
Installed /usr/local/lib/python2.7/site-packages/Twisted-12.3.0-py2.7-linux-x86_64.egg
......
Installed /usr/local/lib/python2.7/site-packages/zope.interface-4.0.4-py2.7-linux-x86_64.egg
Twisted要安装zope.interface,可以从下面地址下载
zope.interface:http://pypi.python.org/packages/source/z/zope.interface/zope.interface-4.0.1.tar.gz
twisted:http://twistedmatrix.com/Releases/Twisted/12.1/Twisted-12.1.0.tar.bz2
5.安装w3lib
[root@zxy-websgs setuptools-0.6c11]# easy_install -U w3lib
Searching for w3lib
Reading http://pypi.python.org/simple/w3lib/
Reading http://github.com/scrapy/w3lib
Best match: w3lib 1.2
Downloading http://pypi.python.org/packages/source/w/w3lib/w3lib-1.2.tar.gz#md5=f929d5973a9fda59587b09a72f185a9e
Processing w3lib-1.2.tar.gz
Running w3lib-1.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-wm_1BB/w3lib-1.2/egg-dist-tmp-2DQHY_
zip_safe flag not set; analyzing archive contents...
Adding w3lib 1.2 to easy-install.pth file
Installed /usr/local/lib/python2.7/site-packages/w3lib-1.2-py2.7.egg
Processing dependencies for w3lib
Finished processing dependencies for w3lib
w3lib:http://pypi.python.org/packages/source/w/w3lib/w3lib-1.2.tar.gz
6.安装libxml2或者用easy_install安装lxml
[root@zxy-websgs lxml-3.1.0]# easy_install lxml
验证lxml安装
[root@zxy-websgs lxml-3.1.0]# python2.7
Python 2.7.3 (default, Feb 28 2013, 03:08:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
>>> exit()
也可以安装libxml2,官网上推荐安装2.6.28或者以上的版本,但在官网上没找到,我先是安装的2.6.9的版本,运行scrapy时报以下错误
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 5, in <module>
pkg_resources.run_script('Scrapy==0.14.4', 'scrapy')
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 489, in run_script
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 1207, in run_script
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/EGG-INFO/scripts/scrapy", line 4, in <module>
execute()
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 112, in execute
cmds = _get_commands_dict(inproject)
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 37, in _get_commands_dict
cmds = _get_commands_from_module('scrapy.commands', inproject)
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 30, in _get_commands_from_module
for cmd in _iter_command_classes(module):
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/cmdline.py", line 21, in _iter_command_classes
for module in walk_modules(module_name):
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/utils/misc.py", line 65, in walk_modules
submod = __import__(fullpath, {}, {}, [''])
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/commands/shell.py", line 8, in <module>
from scrapy.shell import Shell
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/shell.py", line 14, in <module>
from scrapy.selector import XPathSelector, XmlXPathSelector, HtmlXPathSelector
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/__init__.py", line 30, in <module>
from scrapy.selector.libxml2sel import *
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/libxml2sel.py", line 12, in <module>
from .factories import xmlDoc_from_html, xmlDoc_from_xml
File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/factories.py", line 14, in <module>
libxml2.HTML_PARSE_NOERROR + \
AttributeError: 'module' object has no attribute 'HTML_PARSE_RECOVER'
升级到2.6.21版本以后解决了。
libxml2.6.1:ftp://xmlsoft.org/libxml2/python/libxml2-python-2.6.21.tar.gz
7.安装pyOpenSSL(这个是可选安装的,主要为了使scrapy能够支持https)
用easy_install pyOpenSSL安装的是pyOpenSSL-0.13版本,没安装成功,于是手动下载.011版本来进行安装。
[root@zxy-websgs opt]# wget http://launchpadlibrarian.net/58498441/pyOpenSSL-0.11.tar.gz -P /opt
[root@zxy-websgs opt]# tar zxvf pyOpenSSL-0.11.tar.gz
[root@zxy-websgs pyOpenSSL-0.11]# python2.7 setup.py install
pyOpenSSL:http://launchpadlibrarian.net/58498441/pyOpenSSL-0.11.tar.gz
8.安装scrapy
[root@zxy-websgs pyOpenSSL-0.11]# easy_install -U Scrapy
验证安装
[root@zxy-websgs pyOpenSSL-0.11]# scrapy
Scrapy 0.16.4 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
fetch Fetch a URL using the Scrapy downloader
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command
scrapy:http://pypi.python.org/packages/source/S/Scrapy/Scrapy-0.14.4.tar.gz
总结:
pyOpenSSL单独安装的时候不成功,也可以先下载pyOpenSSL0.11进行安装,再使用easy_install -U Scrapy进行全程安装
Python安装lxml(编译安装其依赖的库)
依赖说明:
lxml是libxml2、libxslt的PythonBinding,依赖于libxml2和libxslt。libxslt依赖于libxml2。
由于我们的程序可能要分发到别的机器运行,所以要提取出一个可独立拷贝走的运行时环境,假设该目录为/home/liheyuan/env
1、安装libxml2
|
wget http://xmlsoft.org/sources/libxml2-2.9.0.tar.gz
tar -xzvf libxml2-2.9.0.tar.gz
./configure --prefix=/home/liheyuan/env --without-python
make
make install
|
2、安装libxslt
|
wget http://xmlsoft.org/sources/libxslt-1.1.27.tar.gz
./configure --prefix=/home/liheyuan/env --without-crypto --without-python --with-libxml-prefix=/home/liheyuan/env/
make
make install
|
3、安装lxml
依赖的库都搞定了,终于轮到Python的Binding了。
我们假设Python已经通过编译安装的方式,放到了同样的目录下:/home/liheyuan/env
|
# 下载
wget http://pypi.python.org/packages/source/l/lxml/lxml-3.0.1.tar.gz#md5=0f2b1a063ab3b6b0944cbc4a9a85dcfa
tar -xzvf lxml-3.0.1.tar.gz
cd lxml-3.0.1
# 解压缩、编译
/home/liheyuan/env/bin/python ./setup.py build --with-xslt-config=/home/liheyuan/env/bin/xslt-config
/home/liheyuan/env/bin/python ./setup.py install
|
最后看下效果:
|
/home/liheyuan/env/bin/python
Python 2.7.3 (default, Oct 22 2012, 13:32:03)
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
>>> import lxml.html
>>> 报错.....
|
错误提示,提示etree.so依赖错误!
由于so是我们自己build的,且不在系统默认环境变量路径内,所以我们需要把path加到系统环境变量(so)路径内,如下:
|
vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/liheyuan/env/lib
|
下次重新登陆Terminal就可以了!
六.MongoDB的安装
Linux下Mongodb安装和启动配置
1.下载安装包
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
下载完成后解压缩压缩包
tar zxf mongodb-linux-i686-1.8.2.tgz
2. 安装准备
将mongodb移动到/usr/local/mongdb文件夹
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
======在下一步启动mongodb的时候,有可能提示要安装一些包,如果yum配置是最新最全的话,直接yum install ***(依赖包名) 安装即可!
3. 设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend --auth –port=27017" >> /etc/rc.local
4. 启动mongodb
cd到mongodb目录下的bin文件夹启动mongodb
./mongod --dbpath=/mnt/softs/mongodb/data --fork --logpath=/mnt/softs/mongodb/logs
//下面这个是需要权限的登录方式, 用户连接需要用户名和密码
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --auth --port=27017 --fork
//这个是不需要密码的
/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend --port=27017 --fork
5. 参数解释: --dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips
bound by default
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录
--quiet quieter output 静默模式
--logpath arg file to send all output to instead of stdout 指定日志存放目录
--logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
--fork fork server process 以创建子进程的方式运行
--cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
--noauth run without security 无认证模式运行
--auth run with security 认证模式运行
--objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查
--quota enable db quota management 开始数据库配额的管理
--quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option 调试诊断选项
--nohints ignore query hints 忽略查询命中率
--nohttpinterface disable http interface 关闭http接口,默认是28017
--noscripting disable scripting engine 关闭脚本引擎
--noprealloc disable data file preallocation 关闭数据库文件大小预分配
--smallfiles use a smaller default file size 使用较小的默认文件大小
--nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo print some diagnostic system information 打印系统诊断信息
--upgrade upgrade db if needed 如果需要就更新数据库
--repair run repair on all dbs 修复所有的数据库
--notablescan do not allow table scans 不运行表扫描
--syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s
Replication options:
--master master mode 主复制模式
--slave slave mode 从复制模式
--source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口
--only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale 自动同步从的数据
--oplogSize arg size limit (in MB) for op log 指定操作日志的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
Sharding options:
--configsvr declare this is a config db of a cluster 指定shard中的配置服务器
--shardsvr declare this is a shard db of a cluster 指定shard服务器
6. 进入数据库的CLI管理界面
cd到mongodb目录下的bin文件夹,执行命令./mongo
运行如下:
[root@namenode mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
若数据库出现如不能连上,则是一个data目录下的mongod.lock文件的问题,可以用如下的修复的命令,
mongod --repair
mongodb的操作:
MongoDB常用操作命令大全
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令
<iframe id="cproIframe_u1892994_2" src="http://pos.baidu.com/acom?adn=3&at=231&aurl=&cad=1&ccd=24&cec=GBK&cfv=17&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&dai=2&dis=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DjrIw4FV4u2x_X9sRqeXwBZ9InLAZ4z0ubJsIUPKnax3ZYaKs-MLq7J8qOVId5Wqr%26wd%3D%26eqid%3D9291429100128f770000000555d549a5&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F48217.htm&lu_161=0&lunum=6&n=jb51_cpr&pcs=1216x638&pis=10000x10000&ps=516x143&psr=1280x800&pss=1216x517&qn=af505fb17bc2b339&rad=&rsi0=580&rsi1=90&rsi5=4&rss0=%23FFFFFF&rss1=%23F7FCFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_3&stid=5&td_id=1892994&titFF=%E5%AE%8B%E4%BD%93&titFS=12&titTA=left&tn=text_default_580_90&tpr=1440041384412&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u1892994&ti=MongoDB%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4%E5%A4%A7%E5%85%A8_MongoDB_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&tt=1440041384397.102.115.119" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center,center" width="580" height="90"></iframe>
如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
一、数据库常用命令
1、Help查看命令提示
复制代码代码如下:
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
2、切换/创建数据库
复制代码代码如下:
use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
复制代码代码如下:
show dbs;
4、删除当前使用数据库
复制代码代码如下:
db.dropDatabase();
5、从指定主机上克隆数据库
复制代码代码如下:
db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
复制代码代码如下:
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
复制代码代码如下:
db.repairDatabase();
8、查看当前使用的数据库
复制代码代码如下:
db.getName();
db; db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
复制代码代码如下:
db.stats();
10、当前db版本
复制代码代码如下:
db.version();
11、查看当前db的链接机器地址
复制代码代码如下:
db.getMongo();
二、Collection聚集集合
1、创建一个聚集集合(table)
复制代码代码如下:
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});//创建成功会显示{“ok”:1}
//判断集合是否为定容量db.collName.isCapped();
2、得到指定名称的聚集集合(table)
复制代码代码如下:
db.getCollection("account");
3、得到当前db的所有聚集集合
复制代码代码如下:
db.getCollectionNames();
4、显示当前db所有聚集索引的状态
复制代码代码如下:
db.printCollectionStats();
三、用户相关
1、添加一个用户
复制代码代码如下:
db.addUser("name");
db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读
2、数据库认证、安全模式
复制代码代码如下:
db.auth("userName", "123123");
3、显示当前所有用户
复制代码代码如下:
show users;
4、删除用户
复制代码代码如下:
db.removeUser("userName");
四、聚集集合查询
1、查询所有记录
复制代码代码如下:
db.userInfo.find();
相当于:select* from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
复制代码代码如下:
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
复制代码代码如下:
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
4、查询age > 22的记录
复制代码代码如下:
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age >22;
5、查询age < 22的记录
复制代码代码如下:
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age <22;
6、查询age >= 25的记录
复制代码代码如下:
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
复制代码代码如下:
db.userInfo.find({age: {$lte: 25}});
8、查询age >= 23 并且 age <= 26
复制代码代码如下:
db.userInfo.find({age: {$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
复制代码代码如下:
db.userInfo.find({name: /mongo/});
//相当于%%
[code]select * from userInfo where name like ‘%mongo%';
10、查询name中以mongo开头的
复制代码代码如下:
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%';
11、查询指定列name、age数据
复制代码代码如下:
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age > 25
复制代码代码如下:
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
13、按照年龄排序
复制代码代码如下:
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
14、查询name = zhangsan, age = 22的数据
复制代码代码如下:
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan' and age = ‘22';
15、查询前5条数据
复制代码代码如下:
db.userInfo.find().limit(5);
相当于:selecttop 5 * from userInfo;
16、查询10条以后的数据
复制代码代码如下:
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
selecttop 10 * from userInfo
);
17、查询在5-10之间的数据
复制代码代码如下:
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
复制代码代码如下:
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
19、查询第一条数据
复制代码代码如下:
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
20、查询某个结果集的记录条数
复制代码代码如下:
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21、按照某列进行排序
复制代码代码如下:
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
五、索引
1、创建索引
复制代码代码如下:
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});
2、查询当前聚集集合所有索引
复制代码代码如下:
db.userInfo.getIndexes();
3、查看总索引记录大小
复制代码代码如下:
db.userInfo.totalIndexSize();
4、读取当前集合的所有index信息
复制代码代码如下:
db.users.reIndex();
5、删除指定索引
复制代码代码如下:
db.users.dropIndex("name_1");
6、删除所有索引索引
复制代码代码如下:
db.users.dropIndexes();
六、修改、添加、删除集合数据
1、添加
复制代码代码如下:
db.users.save({name: ‘zhangsan', age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
复制代码代码如下:
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName' where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi';
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';
3、删除
复制代码代码如下:
db.users.remove({age: 132});
4、查询修改删除
复制代码代码如下:
db.users.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
db.runCommand({ findandmodify : "users",
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
update 或 remove 其中一个是必须的参数; 其他参数可选。
参数 详解 默认值
query 查询过滤条件 {}
sort 如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作 {}
remove 若为true,被选中对象将在返回前被删除 N/A
update 一个 修改器对象
N/A
new 若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。 false
fields 参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert 创建新对象若查询结果为空。 示例 (1.5.4+)
false
七、语句块操作
1、简单Hello World
复制代码代码如下:
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
2、将一个对象转换成json
复制代码代码如下:
tojson(new Object());
tojson(new Object('a'));
3、循环添加数据
复制代码代码如下:
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
复制代码代码如下:
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
复制代码代码如下:
>var cursor = db.users.find();
> while (cursor.hasNext()) {
printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
复制代码代码如下:
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
5、forEach迭代循环
复制代码代码如下:
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
复制代码代码如下:
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
复制代码代码如下:
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
7、将find游标转换成数组
复制代码代码如下:
> var arr = db.users.find().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
复制代码代码如下:
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
复制代码代码如下:
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
9、forEach传递函数显示信息
复制代码代码如下:
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
八、其他
1、查询之前的错误信息
复制代码代码如下:
db.getPrevError();
2、清除错误记录
复制代码代码如下:
db.resetError();
查看聚集集合基本信息
1、查看帮助 db.yourColl.help();
2、查询当前集合的数据条数 db.yourColl.count();
3、查看数据空间大小 db.userInfo.dataSize();
4、得到当前聚集集合所在的db db.userInfo.getDB();
5、得到当前聚集的状态 db.userInfo.stats();
6、得到聚集集合总大小 db.userInfo.totalSize();
7、聚集集合储存空间大小 db.userInfo.storageSize();
8、Shard版本信息 db.userInfo.getShardVersion()
9、聚集集合重命名 db.userInfo.renameCollection("users"); 将userInfo重命名为users
10、删除当前聚集集合 db.userInfo.drop();
复制代码代码如下:
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
db.help():显示数据库操作命令,里面有很多的命令
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
http://blog.csdn.net/wwwyuanliang10000/article/details/38661561