首页 > 代码库 > ant编译apache-nutch-2.2.1结合mysql实现爬虫的安装配置全过程

ant编译apache-nutch-2.2.1结合mysql实现爬虫的安装配置全过程

    之前的数据抓取都是用的八爪鱼软件,老大突发奇想要我自己搞个爬虫来抓取数据,网上找找貌似apache的nutch比较合适,于是就开始安装这啥nutch。

    对于一个linux零基础的人来说,还要先学学linux,大致了解了ssh连接工具怎么用后就开始正事了。了解到从nutch2开始,源码就必须要自己编译了,所以还要先安装ant。低版本的ant还不行,需要1.6以上的,所以找了个最新的。

    ant安装:(ant是基于java的,所以要先确保系统中已经安装了jdk)

    1.下载地址:http://ant.apache.org/bindownload.cgi 下载apache-ant-1.9.4-bin.tar.gz(当前最新版本),将该下载包拷贝到/usr/local下(随意了,找个地方就好)

    2。解压

         cd /usr/local  

         tar -zxvf apache-ant-1.8.1-bin.tar.gz

         解压后会在/usr/local 下生成一个文件夹apache-ant-1.8.1

    3。配置环境变量

         vi /etc/profile,如下所示 加入ANT_HOME(解压的ant的路径)同时修改path

unset iunset pathmungeexport JAVA_HOME=/usr/java/jdk1.7.0_25  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport ANT_HOME=/usr/local/apache-ant-1.9.4export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH 

     赋予连接

        cd /usr/bin

        ln -s -f /usr/local/ant/bin/ant

    4。验证是否安装成功 

       运行ant -version,输出如下内容:

       [root@localhost ~]# ant -version
          Apache Ant version 1.9.4 compiled on 。。。。

       ok,ant配置完成。

    nutch的安装:

    一.下载:

    从官网http://www.apache.org/dyn/closer.cgi/nutch/下载最新版本apache-nutch-2.2.1同样放在本地usr/local(位置当然随个人喜好)

    二.解压

       cd /usr/local  

       tar -zxvf apache-nutch-2.2.1-bin.tar.gz

    三.ant编译前需要做的几件事:

        (1)需要下载sonar的jar包(sonar-ant-task-2.1.jar),并将jar包放到解压好的apache-nutch-2.2.1文件夹内

    没有这个jar包,编译会出现错误如下:

[taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found. ivy-probe-antlib: ivy-download:  [taskdef] Could not load definitions from resource org/sonar/ant/antlib.xml. It could not be found.

      (2)nutch编译安装时需要从maven资源库下载jar包,其本身配置文件中的maven仓库地址是不存在的,所以需要修改。

    即:cd apache-nutch-2.2.1/ivy

          vi ivy.setting.xml      修改nutch里ivy目录下的ivysetting.xml

<property name="repo.maven.org" value="http://repo1.maven.org/maven2/" override="false"/>

    将maven的路径用http://mirrors.ibiblio.org/maven2/替换,或者其他可用的maven仓库地址。

    (3)设置数据抓取的存储位置(可以选择使用HBase、Accumulo、Cassandra 、MySQL 、DataFileAvroStore、AvroStore中任何一种来存储数据,但其中一些并不成熟。)

     我选择了简单的mysql,以后学习的Hadoop可以试着和Hadoop结合。

    1.手动创建数据库nutch和数据表webpage【如果不想用默认的库名和表名也可在nutch安装后的相关配置文件中进行修改,见后续说明】,其中webpage的表结构如下:

技术分享
CREATE TABLE `webpage` (`id` varchar(767) NOT NULL,`headers` blob,`text` longtext DEFAULT NULL,`status` int(11) DEFAULT NULL,`markers` blob,`parseStatus` blob,`modifiedTime` bigint(20) DEFAULT NULL,`prevModifiedTime` bigint(20) DEFAULT NULL,`score` float DEFAULT NULL,`typ` varchar(32) CHARACTER SET latin1 DEFAULT NULL,`batchId` varchar(32) CHARACTER SET latin1 DEFAULT NULL,`baseUrl` varchar(767) DEFAULT NULL,`content` longblob,`title` varchar(2048) DEFAULT NULL,`reprUrl` varchar(767) DEFAULT NULL,`fetchInterval` int(11) DEFAULT NULL,`prevFetchTime` bigint(20) DEFAULT NULL,`inlinks` mediumblob,`prevSignature` blob,`outlinks` mediumblob,`fetchTime` bigint(20) DEFAULT NULL,`retriesSinceFetch` int(11) DEFAULT NULL,`protocolStatus` blob,`signature` blob,`metadata` blob,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
View Code

注:表中的字段根据nutch的conf文件“gora-sql-mapping”进行设置。同时也可通过自动方式生成数据库和表:配置好“gora-sql-mapping”、“gora.properties”及其它文件后,首次通过运行”bin/nutch inject urls”即可自动生成数据库和表,不过或许在自动生成的时候你会遇到问题。gora-sql-mapping配置文件如下:

技术分享
<gora-orm><class name="org.apache.nutch.storage.WebPage" keyClass="java.lang.String" table="webpage">  <primarykey column="id" length="512"/>    <field name="baseUrl" column="baseUrl" length="512"/>        <field name="status" column="status"/>    <field name="prevFetchTime" column="prevFetchTime"/>    <field name="fetchTime" column="fetchTime"/>    <field name="fetchInterval" column="fetchInterval"/>    <field name="retriesSinceFetch" column="retriesSinceFetch"/>    <field name="reprUrl" column="reprUrl" length="512"/>    <field name="content" column="content" length="65536"/>    <field name="contentType" column="typ" length="32"/>        <field name="protocolStatus" column="protocolStatus"/>    <field name="modifiedTime" column="modifiedTime"/>    <field name="prevModifiedTime" column="prevModifiedTime"/>    <field name="batchId" column="batchId" length="32"/>    <!-- parse fields                                       -->    <field name="title" column="title" length="512"/>    <field name="text" column="text" length="32000"/>    <field name="parseStatus" column="parseStatus"/>    <field name="signature" column="signature"/>    <field name="prevSignature" column="prevSignature"/>    <!-- score fields                                       -->    <field name="score" column="score"/>    <field name="headers" column="headers"/>    <field name="inlinks" column="inlinks"/>    <field name="outlinks" column="outlinks"/>    <field name="metadata" column="metadata"/>    <field name="markers" column="markers"/></class><class name="org.apache.nutch.storage.Host" keyClass="java.lang.String"table="host">  <primarykey column="id" length="512"/>  <field name="metadata" column="metadata"/>  <field name="inlinks" column="inlinks"/>  <field name="outlinks" column="outlinks"/></class></gora-orm>
View Code 

     注:此处需要将gora-sql-mapping.xml中的id的length改成255。貌似是编码问题。

配置nutchmysql的支持:修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分别:

    将以下行的注释取消

<dependency org=”mysql” name=”mysql-connector-java” rev=”5.1.18″ conf=”*->default”/>

    修改以下行

  •     从默认的<dependency org="org.apache.gora" name="gora-core" rev="0.3" conf="*->default"/>,改成<dependency org="org.apache.gora"      name="gora-core" rev="0.2.1" conf="*->default"/>
  •     将以下行的注释取消

<dependency org="org.apache.gora" name="gora-sql" rev="0.1.1-incubating" conf="*->default" />

   如果不修改以上的两点,Exception in thread “main” Java.lang.ClassNotFoundException:org.apache.gora.sql.store.SqlStore

 3. 数据库连接配置

   编辑/conf/gora.properties文件,注释掉默认的数据库连接配置,同时添加以下配置内容:

################################ Default MySql properties ################################gora.sqlstore.jdbc.driver=com.mysql.jdbc.Drivergora.sqlstore.jdbc.url=jdbc:mysql://192.168.70.4:3306/nutch-testgora.sqlstore.jdbc.user=root1gora.sqlstore.jdbc.password=123456

 

    4.修改nutch-default配置文件

技术分享
   添加http.agent.name的值<property><name>http.agent.name</name><value>YourNutchSpider</value></property>  在文件末尾添加以下内容<property>             <name>http.accept.language</name>             <value>ja-jp, en-us,en-gb,en;q=0.7,*;q=0.3</value>             <description>Value of the Accept-Language request header field.             This allows selecting non-English language as default one to retrieve.             It is a useful setting for search engines build for certain national group.             </description>    </property>    <property>             <name>storage.data.store.class</name>             <value>org.apache.gora.sql.store.SqlStore</value>             <description>The Gora DataStore class for storing and retrieving data.             Currently the following stores are available:.             </description>    </property>        <property>         <name>parser.character.encoding.default</name>         <value>utf-8</value>         <description>The character encoding to fall back to when no other information         is available</description></property>  特别添加以下内容<property>    <name>generate.batch.id</name>    <value>*</value></property>
View Code

如果不添加最后的一段,

Exception in thread "main" java.lang.RuntimeException: job failed: name=generate: null, jobid=job_local177967844_0002

    at org.apache.nutch.util.NutchJob.waitForCompletion(NutchJob.java:54),查询发现utf8 传入了空,log报空指针

 

    四.执行ant编译:

      cd apache-nutch-2.2.1   

      ant

clean-lib:resolve-default:[ivy:resolve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::[ivy:resolve] :: loading settings :: file = /home/shaozt/softIns/CrawSource/apache-nutch-2.1/ivy/ivysettings.xml

      当编译执行到此处时,由于需要从maven仓库下载jar包,所以需要等待2-5分钟连接服务器,根据网络情况决定,需要等很久,有时还会连接服务器失败,如果等很久,可以Ctrl+C退出后,从新ant编译。直到出现编译成功。build successful

runtime:BUILD SUCCESSFULTotal time: 18 seconds[root@localhost apache-nutch-2.2.1]# 

    cd apache-nutch-2.2.1

    tree -L 1  查看目录发现多了build 和 runtime两个文件夹  安装成功

.|-- CHANGES.txt|-- LICENSE.txt|-- NOTICE.txt|-- README.txt|-- build|-- build.xml|-- conf|-- default.properties|-- docs|-- ivy|-- lib|-- runtime|-- sonar-ant-task-2.1.jar`-- src

    五.网页抓取配置

     1) 设置抓取的网站

       cd ${NUTCH_HOME}/runtime/local 

       mkdir -p urls 

       echo ‘http://www.taobao.com‘ > urls/seed.txt

     2) 执行爬取操作

      bin/nutch crawl urls -depth 3 -topN 5

      执行完在mysql中即可查看到爬虫抓取的内容,如下图:

技术分享

ant编译apache-nutch-2.2.1结合mysql实现爬虫的安装配置全过程