最近使用Nutch2.2.1+MySql进行爬虫研究,发现经常会遇到建表失败,乱码异常种类的问题。经过这些天的研究,特别解决方法记录一下。
首先,Mysql的安装,数据库的编码必须是utf8格式(GBK也可以)。需要修改my.ini文件
[client] port = 3306 default-character-set = utf8 [mysql] default-character-set = utf8 [mysqld] port = 3306 character-set-client-handshake = FALSE character-set-server = utf8 collation-server = utf8_general_ci init_connect='SET NAMES utf8' #数据库安装路径 basedir=E:\Program Files\MySql5.6\ #数据存储路径 datadir=E:\ProgramData\MySQL\MySQL Server 5.6\data\ #
接着需要修改Nutch中的表映射文件gora-sql-mapping.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <gora-orm> <class name="org.apache.nutch.storage.WebPage" keyClass="java.lang.String" table="webpage"> <primarykey column="id" length="255"/> <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="21044" /> <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" jdbc-type="TEXT"/> <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>
至此,运行nutch抓取网页的时候,可以正常工作,不会出现建表失败,乱码导致异常
相关推荐
MySQL 是一个流行的开源关系型数据库管理系统,常用于存储和管理 Nutch 抓取的数据。当您在设置 Nutch 与 MySQL 的环境时,可能会遇到各种问题,例如数据库中出现空值。下面我们将详细讨论如何搭建这个环境以及可能...
Java有许多数据存储解决方案,如CSV文件、MySQL数据库、MongoDB等NoSQL数据库。根据数据量和需求,开发者会选择合适的存储方式。 6. IP代理与反反爬策略:为了避免被目标网站封IP,开发者可能需要使用代理IP池,并...
2. **Java编程**:项目的核心编程语言是Java,这要求开发者具备扎实的Java基础,包括面向对象编程、异常处理、集合框架、IO流等知识。 3. **数据存储**:项目中涉及到数据库操作,可能是MySQL、PostgreSQL或其他...
3. **数据存储**:介绍如何将抓取的数据存储到文件系统、数据库(如MySQL)或NoSQL数据库(如MongoDB)中。 4. **并发与多线程**:讨论如何利用Java的并发机制提高爬虫的抓取效率。 5. **反爬策略与应对**:讲解...
这可能涉及到数据库(如MySQL、MongoDB)的使用,或者采用倒排索引结构(如Lucene)来提高查询效率。 7. **反爬虫策略**: - 为了应对网站的反爬机制,Java爬虫可能需要实现模拟登录、设置User-Agent、控制请求...
数据库可以是关系型数据库如MySQL,也可以是非关系型数据库如MongoDB。文档中可能未直接提及数据库,但在爬虫系统设计中,如何存储和管理抓取的数据是一个重要环节。 9. 数据封装: - LinkTypeData类:这是一个Java...
主要技术包括:Hibernate、Spring、SpringMVC、log4j slf4j 整合、myBatis、struts2、Shiro 、redis、流程引擎activity, 爬 ⾍技术nutch,lucene,webService CXF、Tomcat集群和热备 、MySQL读写分离 4. 描述如下:...
4. **数据存储**:爬取的数据需要存储,可能涉及数据库操作,如使用JDBC连接MySQL,或者使用NoSQL数据库如MongoDB进行非结构化数据存储。 5. **网络爬虫框架**:除了基础的编程,也可能涉及到如Apache Nutch、...
7. **持久化存储优化**:对于存储模块,可以选择合适的数据库(如MongoDB、MySQL等),并进行索引优化,提高数据写入和查询的效率。同时,可以利用批量插入减少数据库操作次数,提升性能。 8. **日志监控与报警**:...
数据库管理能力也是必备技能,包括MySQL、MongoDB和PostgreSQL等关系型和非关系型数据库的使用。熟悉SQL查询,能够进行数据库设计和优化,以及处理海量数据存储问题是重要的。 缓存系统如Redis和Memcached的运用...
Java可以通过JDBC接口连接各种数据库,如MySQL、Oracle等。或者使用NoSQL数据库如MongoDB,便于处理大量非结构化数据。 5. **异常处理**:网络爬虫在运行过程中可能会遇到各种问题,如网络错误、服务器返回异常状态...
4. **数据存储**:抓取的数据可能需要存入数据库(如MySQL、MongoDB)或文件系统(如CSV、JSON)。Java的JDBC API可以连接多种数据库,而Jackson或Gson库则方便地将数据序列化为JSON格式。 5. **爬虫框架**:Java也...
6. **数据存储**:抓取的数据通常需要存储,可以是文件系统、数据库(如MySQL、MongoDB)或是云存储服务。Java提供了JDBC接口和其他库如JPA、Hibernate来方便地与数据库交互。 7. **异常处理与日志记录**:良好的...
7. **数据存储**:抓取到的数据通常需要保存,可以使用文件系统、数据库(如MySQL、MongoDB)、甚至是NoSQL存储如Hadoop的HDFS。理解如何将抓取到的结构化数据适配到不同的存储方式很重要。 8. **爬虫策略**:深度...
5. **数据存储**:爬取的数据需要存储,常见的存储方式包括文件系统、数据库(如MySQL、MongoDB)以及NoSQL存储(如HBase)。源码可能涉及如何将抓取的数据有效地存储和组织。 6. **多线程与并发**:为了提高爬取...
7. **数据存储**:抓取的数据通常需要存储,这可能涉及到数据库操作,如SQLite、MySQL或NoSQL数据库如MongoDB。理解JDBC或数据库连接池的概念是必要的。 8. **异常处理和日志记录**:良好的错误处理和日志记录能...
7. **数据存储**:爬取的数据通常需要存储,这可能涉及到数据库(如MySQL、MongoDB)或文件系统(如CSV、JSON)。 8. **异常处理与日志记录**:良好的错误处理和日志记录机制可以帮助调试和监控爬虫运行情况。 9. ...
7. **数据库设计与优化**:项目可能使用MySQL、Oracle或其他关系型数据库存储抓取的新闻数据,涉及表结构设计、索引优化、事务处理等。 8. **Web服务接口**:可能采用RESTful API设计,提供给前端或其他系统调用,...
PHP通常与MySQL数据库结合使用,通过PDO(PHP Data Objects)或mysqli扩展进行数据库操作。这些扩展支持预处理语句,提高了安全性并降低了SQL注入的风险。 7. **错误和异常处理** PHP提供了错误报告和异常处理...
4. **存储与持久化**:抓取的数据通常需要存储,可以选择数据库(如MySQL、MongoDB)或文件系统。对于图片,除了保存为文件,还可以考虑使用对象存储服务,如阿里云OSS、亚马逊S3。 5. **异常处理与日志记录**:...