当我们配置Nutch抓取 http://blog.csdn.net/gaokao2011/article/details/38661903的时候,抓取的所有页面内容均为:您的访问请求被拒绝 ......这是最简单的反爬虫策略(该策略简单地读取HTTP请求头User-Agent的值来判断是人(浏览器)还是机器爬虫),我们只需要简单地配置Nutch来模拟浏览器(simulate
web browser)就可以绕过这种限制。
在nutch-default.xml中有5项配置是和User-Agent相关的:
<property>
<name>http.agent.description</name>
<value></value>
<description>Further description of our bot- this text is used in
the User-Agent header. It appears in parenthesis after the agent name.
</description>
</property>
<property>
<name>http.agent.url</name>
<value></value>
<description>A URL to advertise in the User-Agent header. This will
appear in parenthesis after the agent name. Custom dictates that this
should be a URL of a page explaining the purpose and behavior of this
crawler.
</description>
</property>
<property>
<name>http.agent.email</name>
<value></value>
<description>An email address to advertise in the HTTP 'From' request
header and User-Agent header. A good practice is to mangle this
address (e.g. 'info at example dot com') to avoid spamming.
</description>
</property>
<property>
<name>http.agent.name</name>
<value></value>
<description>HTTP 'User-Agent' request header. MUST NOT be empty -
please set this to a single word uniquely related to your organization.
NOTE: You should also check other related properties:
http.robots.agents
http.agent.description
http.agent.url
http.agent.email
http.agent.version
and set their values appropriately.
</description>
</property>
<property>
<name>http.agent.version</name>
<value>Nutch-1.7</value>
<description>A version string to advertise in the User-Agent
header.</description>
</property>
在类nutch1.7/src/plugin/lib-http/src/java/org/apache/nutch/protocol/http/api/HttpBase.java中可以看到这5项配置是如何构成User-Agent的:
this.userAgent = getAgentString( conf.get("http.agent.name"),
conf.get("http.agent.version"),
conf.get("http.agent.description"),
conf.get("http.agent.url"),
conf.get("http.agent.email") );
private static String getAgentString(String agentName,
String agentVersion,
String agentDesc,
String agentURL,
String agentEmail) {
if ( (agentName == null) || (agentName.trim().length() == 0) ) {
// TODO : NUTCH-258
if (LOGGER.isErrorEnabled()) {
LOGGER.error("No User-Agent string set (http.agent.name)!");
}
}
StringBuffer buf= new StringBuffer();
buf.append(agentName);
if (agentVersion != null) {
buf.append("/");
buf.append(agentVersion);
}
if ( ((agentDesc != null) && (agentDesc.length() != 0))
|| ((agentEmail != null) && (agentEmail.length() != 0))
|| ((agentURL != null) && (agentURL.length() != 0)) ) {
buf.append(" (");
if ((agentDesc != null) && (agentDesc.length() != 0)) {
buf.append(agentDesc);
if ( (agentURL != null) || (agentEmail != null) )
buf.append("; ");
}
if ((agentURL != null) && (agentURL.length() != 0)) {
buf.append(agentURL);
if (agentEmail != null)
buf.append("; ");
}
if ((agentEmail != null) && (agentEmail.length() != 0))
buf.append(agentEmail);
buf.append(")");
}
return buf.toString();
}
在类nutch1.7/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/HttpResponse.java中使用User-Agent请求头,这里的http.getUserAgent()返回的userAgent就是HttpBase.java中的userAgent:
String userAgent = http.getUserAgent();
if ((userAgent == null) || (userAgent.length() == 0)) {
if (Http.LOG.isErrorEnabled()) { Http.LOG.error("User-agent is not set!"); }
} else {
reqStr.append("User-Agent: ");
reqStr.append(userAgent);
reqStr.append("\r\n");
}
通过上面的分析可知:在nutch-site.xml中只需要增加如下几种配置之一便可以模拟一个特定的浏览器(Imitating
a specific browser):
1、模拟Firefox浏览器:
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko</value>
</property>
<property>
<name>http.agent.version</name>
<value>20100101 Firefox/27.0</value>
</property>
2、模拟IE浏览器:
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident</value>
</property>
<property>
<name>http.agent.version</name>
<value>6.0)</value>
</property>
3、模拟Chrome浏览器:
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari</value>
</property>
<property>
<name>http.agent.version</name>
<value>537.36</value>
</property>
4、模拟Safari浏览器:
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari</value>
</property>
<property>
<name>http.agent.version</name>
<value>534.57.2</value>
</property>
5、模拟Opera浏览器:
<property>
<name>http.agent.name</name>
<value>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36 OPR</value>
</property>
<property>
<name>http.agent.version</name>
<value>19.0.1326.59</value>
</property>
后记:查看User-Agent的方法:
1、http://www.useragentstring.com
2、http://whatsmyuseragent.com
3、http://www.enhanceie.com/ua.aspx
分享到:
相关推荐
本文将详细解析如何在Eclipse中配置Nutch,以便于开发者更好地理解和操作这一过程。 ### 一、理解Nutch与Eclipse的结合 Nutch是一个基于Hadoop的框架,用于构建可扩展且高性能的网络爬虫。它不仅能够抓取网页,还...
Nutch 是一个开源的Web爬虫项目,由Apache软件基金会维护。它被设计用来抓取互联网上的网页,并对其进行索引,以便进行后续的搜索和分析。Nutch 的爬虫数据通常包括了它在抓取过程中收集到的网页URL、网页内容、元...
- 修改配置文件,如 `nutch-site.xml` 和 `crawl-urlfilter.txt`,以适应你的需求。 - **借助 Cygwin 使用 Nutch**: - 安装 Cygwin,这是一个模拟 Linux 环境的工具,使得可以在 Windows 上运行 Linux 命令行...
例如,可能会讲解如何定制Nutch的配置文件以适应特定的抓取需求,如何避免重复抓取和IP封锁问题,以及如何调整抓取速度和深度。此外,还可能探讨Nutch与其他大数据工具如Solr或Elasticsearch的集成,用于构建全文...
nutch配置nutch-default.xml
Nutch 的搭建过程主要包括准备工作、安装 Linux 系统、安装 JDK、配置 Nutch 创建索引、安装 Tomcat 和配置 Nutch 查询索引等步骤。 准备工作 在开始搭建 Nutch 之前,需要准备一个 Linux 操作系统和 JDK 环境。...
在`conf/regex-urlfilter.txt`中定义爬虫应遵循的URL模式,以限制抓取范围。 6. **种子URL设置** 创建一个包含初始URL的文本文件,命名为`urls/seed.txt`,这将是Nutch首次抓取的起点。 7. **编译与运行** 使用...
在实际使用中,开发者和管理员需要根据项目的具体需求来调整这些配置文件,比如调整爬虫的速度以避免对目标网站造成过大压力,或者定制分词规则以提高索引的准确性。同时,对于Nutch插件,开发者也需要编写相应的...
在Windows 7环境下配置Apache Nutch是一个相对复杂的过程,因为它主要设计用于Linux操作系统。Nutch是一个开源的网络爬虫框架,常用于构建搜索引擎。以下是在Windows 7中配置Nutch的详细步骤: 首先,我们需要安装...
当前常用的反爬虫策略包括基于用户代理的反爬虫、基于 IP 限制的反爬虫和基于验证码的反爬虫等。 4. 基于 Chrome 浏览器插件的爬虫系统 本文设计和实现的爬虫系统基于 Chrome 浏览器插件,使用 JavaScript 语言开发...
2. **配置文件**:包含了Nutch运行所需的配置参数,如爬虫策略、存储路径等。 3. **依赖库**:包含运行Nutch所需的第三方库,如Hadoop、Solr等。 4. **文档**:提供详细的用户指南和开发者文档,帮助用户理解和使用...
Nutch 是一个开源的Web爬虫项目,主要设计用于构建大规模的搜索引擎。它提供了一种高效、可扩展的方式来抓取和索引互联网上的数据。Nutch 的灵活性在于它支持多种爬网策略,既可以用于爬行企业内部网络,也可以用于...
Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并生成索引,以便于搜索引擎使用。本文将详细介绍如何在Windows环境下配置Nutch 1.4,并使用Eclipse进行开发。以下是你需要知道的关键步骤: 1. **...
综上所述,Nutch 1.4在Windows下的安装配置涉及多个环节,包括Java环境搭建、Cygwin的安装、Nutch与Solr的下载与配置等,每一步都需仔细操作以确保系统正常运行。通过以上步骤,用户不仅能够实现对目标网站的自动化...
Nutch 是一个开源的网络爬虫项目,用于抓取网页并建立索引。它与 Hadoop 紧密集成,支持大规模数据处理。在安装和配置 Nutch 开发环境时,可能会遇到各种问题,以下是对这些问题的详细解答。 首先,确保你已经下载...
Nutch是一个开源的网络爬虫框架,由Apache基金会开发和维护。它能够高效地抓取并处理海量数据,并提供了丰富的插件来支持各种数据源和处理方式。由于其高度可定制化和易于扩展的特性,Nutch被广泛应用于搜索引擎、...