有一个专门爬虫的网站:http://www.shenjianshou.cn/

网络爬虫基本原理

网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。

一、网络爬虫的基本结构及工作流程

一个通用的网络爬虫的框架如图所示:

 网络爬虫的基本工作流程如下:
  • 首先选取一部分精心挑选的种子URL;

  • 将这些URL放入待抓取URL队列;

  • 从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

  • 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

二、从爬虫的角度对互联网进行划分

对应的,可以将互联网的所有页面分为五个部分:

  • 已下载未过期网页

  • 已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份,互联网是动态变化的,一部分互联网上的内容已经发生了变化,这时,这部分抓取到的网页就已经过期了。

  • 待下载网页:也就是待抓取URL队列中的那些页面

  • 可知网页:还没有抓取下来,也没有在待抓取URL队列中,但是可以通过对已抓取页面或者待抓取URL对应页面进行分析获取到的URL,认为是可知网页。

  • 还有一部分网页,爬虫是无法直接抓取下载的。称为不可知网页。

三、抓取策略

在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面重点介绍几种常见的抓取策略:

1.深度优先遍历策略

深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们以下面的图为例:


遍历的路径:A-F-G E-H-I B C D

2.宽度优先遍历策略

宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上面的图为例:

遍历路径:A-B-C-D-E-F G H I

3.反向链接数策略

反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。

在真实的网络环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那个也的重要程度。因此,搜索引擎往往考虑一些可靠的反向链接数。

简单的爬虫实例

爬取58同城上的房子简介,房子类型,房子价格等信息,然后写入到rent.csv文件中,形成表格.

#!/usr/bin/python
#coding=utf-8from bs4 import BeautifulSoup
from urlparse import urljoinimport requests
import csv# 选取价格在1500-2000之间的房子信息
url = 'http://bj.58.com/pinpaigongyu/pn/{page}/?minprice=1500_2000'page = 0csv_file = open('rent.csv','wb')
csv_writer = csv.writer(csv_file,delimiter = ',')while True:page += 1print "fetch: ",url.format(page = page)response = requests.get(url.format(page = page))html = BeautifulSoup(response.text)house_list = html.select('.list > li')if not house_list:breakfor house in house_list:house_title = house.select("h2")[0].string.encode("utf-8")house_url = urljoin(url,house.select("a")[0]["href"])house_info_list = house_title.split()if "公寓" in house_info_list[1] or "青年公寓" in house_info_list[1]:house_location = house_info_list[0]else:house_location = house_info_list[1]house_money = house.select(".money")[0].select("b")[0].string.encode("utf-8")csv_writer.writerow([house_title,house_location,house_money,house_url])csv_file.close()

形成的rent.csv表格的效果图如下:

网络爬虫的原理和案例相关推荐

  1. 干货:一文看懂网络爬虫实现原理与技术(值得收藏)

    01  网络爬虫实现原理详解 不同类型的网络爬虫,其实现原理也是不同的,但这些实现原理中,会存在很多共性.在此,我们将以两种典型的网络爬虫为例(即通用网络爬虫和聚焦网络爬虫),分别为大家讲解网络爬虫的 ...

  2. 网络爬虫工作原理分析

    网络爬虫工作原理 1.聚焦爬虫工作原理及关键技术概述 网络爬虫是一个自动提取网页的程序,它为搜索引擎从Internet网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得 ...

  3. 网络爬虫工作原理详解

    网络爬虫工作原理详解 一.通用网络爬虫运行原理 二.聚焦网络爬虫运行原理

  4. 揭秘Java网络爬虫程序原理

    随着互联网+时代的来临,越来越多的互联网企业层出不穷,涉及游戏.视频.新闻.社交.电商.房产.旅游等众多行业.如今互联网成为大量信息的载体,如何有效地从中提取有价值的信息并利用这些信息成为一个巨大的挑 ...

  5. 百度爬虫爬到虚拟链接 网站被黑_什么是网络爬虫?原理是什么?种类有多少?...

    ins @ngadc 前言 我相信很多人都听说过(网络)爬虫,但不清楚这到底是个什么概念.本文借助网上相关资料,进行简单地汇总整理.爬虫还是比较敏感,在简书发文章,竟然发不了... 目录 什么是网络爬 ...

  6. Java网络爬虫实战案例一

    紧接我们上次的问题,如何获取服务器发送的资源,保存到本地?上一篇文章见java网络爬虫核心原理. 一.Java IO流三分游(input,output)   我们知道计算机是用来处理数据的.所有的程序 ...

  7. 【Java网络编程(一)】IP地址、端口、URL、网络爬虫原理、TCP UDP协议

    IP地址与域名的获取 package cn.hanquan.test;import java.net.InetAddress; import java.net.UnknownHostException ...

  8. Python爬虫(2.网络爬虫的实现原理及技术)

    网络爬虫的实现原理及技术 1.   网络爬虫实现原理 以两种爬虫为例,讲解网络爬虫的实现原理. 1)       通用网络爬虫 图1 通用网络爬虫实现原理及过程 见图1,通用网络爬虫的实现原理及过程可 ...

  9. Java网络爬虫该如何学习

    文章目录 引言 怎么入门网络爬虫 课程特色 学完本课程能收获什么 引言 互联网以及移动技术的飞速发展,使得全球数据量呈现前所未有的爆炸式增长态势.例如,用户在互联网上的搜索数据.交易数据.评论数据.社 ...

最新文章

  1. 洛谷 1774 最接近神的人
  2. 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...
  3. IM4Java + GraphicsMagick 实现高清图片剪裁处理
  4. 解决编译twrp3.0.3遇到的问题
  5. python进阶书籍推荐-豆瓣评分9.4!年度最值得推荐的Python进阶书
  6. nyoj 304(区间dp)
  7. python文件中环境声明_Python环境构建
  8. 努比亚连续按下android版本,虚惊一场!努比亚Z17的Android 9.0真的不远了
  9. leetcode76:最小覆盖字串(滑动窗口)
  10. 网络时延——发送时延和传播时延
  11. linux mac地址文件夹,android4.4.2系统的mac地址文件在哪个文件里面
  12. vue组件中嵌套html,vue2.0怎么用组件自定义标签实现组件的嵌套?
  13. select 中添加option的注意
  14. 二叉树的基本操作(C)
  15. python脚本第一行_python脚本第一行如何写
  16. TiDB 社区专栏:让技术人员成为更好的读者/作家
  17. ear的英语怎么念_ears用英语怎么读?
  18. iOS内测分发平台的选择与标准
  19. lisp 练习取得对象属性
  20. 吊打tomcat的高性能web服务器undertow

热门文章

  1. 【RNN从入门到实战】GRU入门到实战——使用GRU预测股票。
  2. 卧槽:原来7-zip才是解压缩软件中的业界良心!
  3. Linux下安装tuned以使用tuned-adm命令优化Linux系统性能
  4. 阿里云产品优惠推广链接
  5. 屠龙猎手攻略(图)原创
  6. X-RAY 扫到dirscan/sourcemap/default漏洞
  7. 笑断肠:程序员的最高荣誉
  8. caffe刚开始训练准确率很高,经过几次训练就达到饱和的原因
  9. PDF文件带有密码如何解除?
  10. Spring集成MyBatis