`

配置Nutch模拟浏览器以绕过反爬虫限制

阅读更多

当我们配置Nutch抓取 http://yangshangchuan.iteye.com 的时候,抓取的所有页面内容均为:您的访问请求被拒绝 ...... 这是最简单的反爬虫策略(该策略简单地读取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

 

NUTCH/HADOOP视频教程

1
4
分享到:
评论
1 楼 zhiwupei 2014-03-14  
目前要用到这个,谢谢。了解下。

相关推荐

    eclipse配置nutch,eclipse配置nutch

    本文将详细解析如何在Eclipse中配置Nutch,以便于开发者更好地理解和操作这一过程。 ### 一、理解Nutch与Eclipse的结合 Nutch是一个基于Hadoop的框架,用于构建可扩展且高性能的网络爬虫。它不仅能够抓取网页,还...

    nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据

    Nutch 是一个开源的Web爬虫项目,由Apache软件基金会维护。它被设计用来抓取互联网上的网页,并对其进行索引,以便进行后续的搜索和分析。Nutch 的爬虫数据通常包括了它在抓取过程中收集到的网页URL、网页内容、元...

    Windows下配置nutch

    - 修改配置文件,如 `nutch-site.xml` 和 `crawl-urlfilter.txt`,以适应你的需求。 - **借助 Cygwin 使用 Nutch**: - 安装 Cygwin,这是一个模拟 Linux 环境的工具,使得可以在 Windows 上运行 Linux 命令行...

    nutch爬虫资料

    例如,可能会讲解如何定制Nutch的配置文件以适应特定的抓取需求,如何避免重复抓取和IP封锁问题,以及如何调整抓取速度和深度。此外,还可能探讨Nutch与其他大数据工具如Solr或Elasticsearch的集成,用于构建全文...

    nutch配置nutch-default.xml

    nutch配置nutch-default.xml

    nutch使用文档

    Nutch 的搭建过程主要包括准备工作、安装 Linux 系统、安装 JDK、配置 Nutch 创建索引、安装 Tomcat 和配置 Nutch 查询索引等步骤。 准备工作 在开始搭建 Nutch 之前,需要准备一个 Linux 操作系统和 JDK 环境。...

    搜索引擎nutch配置

    在`conf/regex-urlfilter.txt`中定义爬虫应遵循的URL模式,以限制抓取范围。 6. **种子URL设置** 创建一个包含初始URL的文本文件,命名为`urls/seed.txt`,这将是Nutch首次抓取的起点。 7. **编译与运行** 使用...

    Nutch_的配置文件

    在实际使用中,开发者和管理员需要根据项目的具体需求来调整这些配置文件,比如调整爬虫的速度以避免对目标网站造成过大压力,或者定制分词规则以提高索引的准确性。同时,对于Nutch插件,开发者也需要编写相应的...

    windows7环境下配置nutch

    在Windows 7环境下配置Apache Nutch是一个相对复杂的过程,因为它主要设计用于Linux操作系统。Nutch是一个开源的网络爬虫框架,常用于构建搜索引擎。以下是在Windows 7中配置Nutch的详细步骤: 首先,我们需要安装...

    计算机-爬虫-基于Chrome浏览器插件的爬虫系统.pdf

    当前常用的反爬虫策略包括基于用户代理的反爬虫、基于 IP 限制的反爬虫和基于验证码的反爬虫等。 4. 基于 Chrome 浏览器插件的爬虫系统 本文设计和实现的爬虫系统基于 Chrome 浏览器插件,使用 JavaScript 语言开发...

    apache-nutch-1.19 java编写的网络爬虫项目

    2. **配置文件**:包含了Nutch运行所需的配置参数,如爬虫策略、存储路径等。 3. **依赖库**:包含运行Nutch所需的第三方库,如Hadoop、Solr等。 4. **文档**:提供详细的用户指南和开发者文档,帮助用户理解和使用...

    nutch爬虫说明文档

    Nutch 是一个开源的Web爬虫项目,主要设计用于构建大规模的搜索引擎。它提供了一种高效、可扩展的方式来抓取和索引互联网上的数据。Nutch 的灵活性在于它支持多种爬网策略,既可以用于爬行企业内部网络,也可以用于...

    Nutch配置环境\Nutch1[1].4_windows下eclipse配置图文详解.docx

    Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并生成索引,以便于搜索引擎使用。本文将详细介绍如何在Windows环境下配置Nutch 1.4,并使用Eclipse进行开发。以下是你需要知道的关键步骤: 1. **...

    nutch_1.4配置

    综上所述,Nutch 1.4在Windows下的安装配置涉及多个环节,包括Java环境搭建、Cygwin的安装、Nutch与Solr的下载与配置等,每一步都需仔细操作以确保系统正常运行。通过以上步骤,用户不仅能够实现对目标网站的自动化...

    nutch安装开发环境的配置

    Nutch 是一个开源的网络爬虫项目,用于抓取网页并建立索引。它与 Hadoop 紧密集成,支持大规模数据处理。在安装和配置 Nutch 开发环境时,可能会遇到各种问题,以下是对这些问题的详细解答。 首先,确保你已经下载...

    Apache Nutch 网络爬虫.rar

    Nutch是一个开源的网络爬虫框架,由Apache基金会开发和维护。它能够高效地抓取并处理海量数据,并提供了丰富的插件来支持各种数据源和处理方式。由于其高度可定制化和易于扩展的特性,Nutch被广泛应用于搜索引擎、...

Global site tag (gtag.js) - Google Analytics