`
waveeee
  • 浏览: 52465 次
  • 来自: 上海
社区版块
存档分类
最新评论

网页爬虫程序开发经验谈 <转>

阅读更多
http://www.dnbcw.com/biancheng/dreamweaver/flrt75315.html
简介:这是网页爬虫程序开发经验谈的详细页面,介绍了和dreamweaver,网页爬虫有关的知识,加入收藏请按键盘ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处

现在是网络的时代,所有数据都可以在互联网上得到,所以能够自动抓取Web数据的网页爬虫程序(又叫网络机器人,Web Robot)就逐渐流行了起来。

开发网页爬虫的过程,需要运用各种Heuristic(摸索体验)的作法:尝试你的想法,修正预期以外的错误(错误通常相当多),一再重复进行,直到网页爬虫可行为止。所以写网页爬虫程序时,是需要一点点耐心的。

一般的状况下,网页爬虫程序会先取一个网页,从此网页取出所有“后续的链接”,然后继续取这些链接的网页。网页的组织方式如果是线性的(例如:每个网页都有“前一笔资料”与“下一笔数据”的超级链接),那么超级链接就不会重复,所以就不需要判断这些链接有无重复。但组织方式只要不是线性的,都需要判断网页超级链接有无重复。

你以为HTTP状态码(status code)是代表正常的200,就表示能够顺利取网页吗?那可不一定,我发现有些服务器会限制同时上线的最大联机数目,超出限制,就会送出“服务器忙碌中”的HTML内容,但HTTP状态码(status code)居然还是使用代表正常的200。会不会遇到这种状况?何时会遇到?很难说得准。如果你想预防这种问题,可以从判断取内容的checksum有无重复来下手。

和 "网页爬虫程序开发经验谈" 有关的编程小帖士:

strong>Locale.Languages.ICELANDIC
表示冰岛语。

语法

public static final int ICELANDIC;

为了防堵网页爬虫,有些网站会限制来自同一个IP的请求频率。当频率超过限制,就会对此IP联机请求进行屏蔽,客户端最后会Timeout,联机失败。所以,当你遇到联机失败的状况,请先更换成新的IP,以确定服务器是否真的挂了,或者只是你的IP被封锁了。如果确定IP被封锁,你可以采用两种策略:(1)随时动态更换IP;或者(2)调节网页爬虫的请求频率。
如果你的计算机上同时有两三个IP,你当然可以在这些IP之间轮替更换,但这样其实帮助不大,因为IP被封锁通常会维持好一段时间,轮完第三个IP之后,恐怕第一个IP也还没被服务器从黑名单中去除。如果你要动态更换IP,最好改用ADSL拨号网络,因为ISP拥有大量的IP,会分配到和之前相同的IP机率很低。一旦你发现目前的IP被封锁,便可以立刻呼叫相关的API将网络断线并重新拨号,取得新的IP继续执行。

如果你不知道该如何呼叫拨号API,或者根本没有拨号网络,那么你只好降低网页爬虫发出请求的频率。频率太低,取得数据的速度太慢;频率太高,很快就会被服务器封锁。如何调整出一个理想值,通常需要测试好一阵子。

  对网页资料的加工处理方式,通常是先将超级链接更新到本地文件,再提取重要数据保存到其他地方。更新超级链接其实满容易的,不容易出错,但“提取重要数据”就可能会遇到相当多问题,值得进一步探讨。

  通过网页爬虫程序取的网页数据,通常需要经过加工处理。因此建议你不要一边取网页,一边加工处理,最好等网页全部取之后,再进行数据提取。为了避免URL名称不适合用来当成档名(例如Windows中不能用“con”当文件名),我习惯使用数字序号当文件名,然后再建立一个URL和数字序号的对照表(可以加上超级链接,以方便取用)。

在提取数据前,你需要先花一点时间研究出这些网页的HTML模板,接着你就可以取出特定tag的element,或者“以特定字符串为识别”的数据。我的经验是,光看几个HTML内容,仍不足以推测出完整的模板,有些状况可能是一百个或一千个网页才发生一次(更不用说还有一些是网站本身建构时的疏失)。因此,最好能先写一个程序扫描所有取的网页,证实你构想中的HTML模板是正确的,然后才开始进行数据提取。

在研究网页模板时,如果发现网页内出现JavaScript,你应该判断是否可以对它置之不理。因为许多网页的JavaScript程序代码是用来处理网页互动,和我们所关心的网页内容无关,可以不予理会。但如果遇到和数据相关的JavaScript程序代码(会产生HTTP请求),就必须特别注意。

你可以动用外部的JavaScript Engine(例如Rhino)来处理JavaScript程序代码,但是对网页爬虫程序来说,大多数的时候,其实没有必要这么做。你可以先阅读理解这些JavaScript程序代码,知道这段程序的目的是发出什么HTTP请求,就可以让网页爬虫自行模拟这样的HTTP请求。

当你的计算机跑着网页爬虫程序时,只要有预期以外的事情发生(例如格式不对、网站不通),就需要人的介入。尤其前几个小时是重要的观察期,这个时候最好乖乖地坐在计算机前,当出状况时,网页爬虫可以发出声音提醒我们进行处理。

我一直觉得,开发网页爬虫是相当实用、有趣、需要技巧的,且网页爬虫程序通常不大,所以很适合当作“下班后的自我挑战”,或是老师留给学生当作业。如果你没写过网页爬虫程序,我建议你马上试试看。
分享到:
评论

相关推荐

    爬取网页中的链接(通常位于<a>标签的href属性中)是网页爬虫的一项常见任务

    爬取网页中的链接(通常位于&lt;a&gt;标签的href属性中)是网页爬虫的一项常见任务。以下是使用Python和BeautifulSoup库来实现这一功能的基本步骤。假设你已经安装了requests和beautifulsoup4。 解析HTML内容‌: 如果请求...

    webmagic-0.7.3-all.tar.gz

    webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发。 最新版:WebMagic-0.7.3 Maven依赖: &lt;dependency&gt; &lt;groupId&gt;us.codecraft&lt;/groupId&gt; &lt;artifactId&gt;webmagic-...

    一个可以定制的爬虫

    sucker_config.ini 网页分析器的配置&lt;/br&gt; 1. maxThreads 分析器的线程数&lt;/br&gt; 2. pattern parser匹配的正则表达式&lt;/br&gt; 3. parser 指定对应pattern的分析器&lt;/br&gt; 本程序支持自定义分析器。可以参照软件包中...

    HttpClient 4.5 封装的工具类 HttpUtil 可用于爬虫和模拟登陆

    &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;...

    Python爬虫入门教程:超级简单的Python爬虫教程.pdf

    &lt;li&gt;&lt;a href="http://c.biancheng.net"&gt;爬虫&lt;/a&gt;&lt;/li&gt; &lt;li&gt;数据清洗&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; ``` #### 三、爬虫的合法性 在进行网页抓取时,需要注意爬虫的合法性和伦理问题。大多数网站都会提供一...

    java基于jsoup+mongodb的简单爬虫入门程序

    本教程将介绍如何使用Java编程语言,结合Jsoup库进行网页抓取,并利用MongoDB数据库存储爬取的数据,帮助初学者快速入门爬虫开发。 首先,我们来了解一下Jsoup。Jsoup是一个用于处理实际世界HTML的Java库。它提供了...

    基于owMax爬虫程序的Html5网页展示.zip

    1. **结构化元素**:HTML5引入了许多新的结构元素,如&lt;header&gt;、&lt;nav&gt;、&lt;section&gt;、&lt;article&gt;和&lt;footer&gt;等,这些元素有助于提升网页的语义性,使搜索引擎更好地理解和索引网页内容。 2. **表单控件**:HTML5提供了...

    Python网页爬虫程序框架

    Python网页爬虫程序框架 常用的Python网页爬虫程序框架包括: Scrapy:Scrapy是一个强大的开源网络爬虫框架,提供了完整的爬虫流程管理,包括异步IO操作、多线程管理、反爬虫策略等功能。它支持XPath和CSS选择器...

    爬虫把图片和文字写入到word中

    &lt;groupId&gt;org.jsoup&lt;/groupId&gt; &lt;artifactId&gt;jsoup&lt;/artifactId&gt; &lt;version&gt;1.14.3&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&lt;/artifactId&gt; &lt;version&gt;5.2.0&lt;/...

    Python写的解Foxmail的.BOX文件小程序(源码+可执行文件)

    &lt;br&gt;当然,这个程序的功能还很弱,只能解纯文本格式的邮件,&lt;br&gt;含有图片等其他内容的邮件是没法解的。&lt;br&gt;&lt;br&gt;cutfox.zip包中有两个文件夹,cutfox_src文件夹里的为源代码,cutfox_dist文件夹里的为编译后的exe可...

    python 爬虫源码

    Python作为一门简洁且强大的编程语言,是编写爬虫的热门选择,其丰富的库资源如requests、BeautifulSoup、Scrapy等为爬虫开发提供了便利。 在描述中提到的“可以用XML定制爬取规则”,这指的是通过XML文件来定义...

    java 开发的网页爬虫

    Java开发的网页爬虫是一种利用编程技术自动化抓取互联网上信息的工具,主要应用于数据分析、搜索引擎索引、市场研究等领域。在Java中实现网页爬虫,通常涉及到以下几个关键知识点: 1. **网络请求库**:Java中常用...

    python爬虫爬取VIJOS题库资源

    Python作为一门强大的脚本语言,拥有丰富的库支持网络爬虫的开发。例如,`requests`库用于发送HTTP请求,`BeautifulSoup`库则用于解析HTML和XML文档。在爬取VIOJ题库时,开发者可能首先需要利用`requests`来获取网页...

    爬虫jsp获取网页源码

    【爬虫jsp获取网页源码】这一主题主要涉及网络爬虫技术在Java Server Pages (JSP)中的应用,以及如何通过前端交互获取网页源码。爬虫是互联网数据挖掘的重要工具,它能够自动地遍历网页,抓取所需信息。在JSP环境下...

    webgather(改进版)

    使用Eclipse3.3编写的、图片爬虫(2007-11-13)&lt;br&gt;比前几天的有以下改进:&lt;br&gt;1、增加了线程控制,如果是2M网,最好限制在20个线程之内;&lt;br&gt;2、可以进行链接数量限制;&lt;br&gt;----------------------------------------...

    网页爬虫工具jsoup,jar包

    总之,Jsoup是一个强大且易用的Java库,它使得网页爬虫的开发变得更加简单和高效。通过熟练掌握Jsoup,你可以快速地构建起自己的网页数据抓取和处理系统,无论是用于数据分析、信息监控还是其他用途。

    js跳转不影响蜘蛛抓取.rar

    2. **使用`&lt;noscript&gt;`标签**:尽管不是所有爬虫都支持`&lt;noscript&gt;`标签,但Google等主要搜索引擎可以读取其中的内容。在JS跳转代码前添加`&lt;noscript&gt;`标签,里面包含目标URL,这样爬虫就能知道跳转的目的地。 3. *...

    Python 爬虫入门的教程之Beautiful Soup解析

    在 HTML 中,标签是成对出现的,常见的标签有:&lt;html&gt;、&lt;body&gt;、&lt;div&gt;、&lt;p&gt;、&lt;li&gt;、&lt;img&gt;、&lt;h1&gt;、&lt;a&gt; 等。这些标签定义了网页的框架和结构。 二、使用 requests 库抓取网站数据 在 Python 中,可以使用 requests ...

    网页爬虫程序

    网页爬虫程序是一种自动化工具,用于从互联网上搜集和整理数据。在信息技术领域,它扮演着重要的角色,尤其是在大数据分析、市场研究、搜索引擎优化(SEO)以及内容监控等方面。网页爬虫通过模拟人类浏览器的行为,...

    Python爬虫是一种自动从互联网上提取信息的程序 要开始使用Python进行爬虫,你需要了解以下基础知识

    Python爬虫是一种自动从互联网上提取信息的程序。要开始使用Python进行爬虫,你需要了解...html = '&lt;html&gt;&lt;head&lt;title&gt;Example Page&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;' soup = BeautifulSoup(html, 'html.parser')

Global site tag (gtag.js) - Google Analytics