不管你是因为什么原因想做一个网络爬虫,首先做的第一件事情就是要了解它。

在了解网络爬虫之前一定要牢记下面4个要点,这是做网络爬虫的基础:

1.抓取

py的urllib不一定去用。可是要学。假设你还没用过的话。

比較好的替代品有requests等第三方更人性化、成熟的库,假设pyer不了解各种库。那就白学了。

抓取最基本就是拉网页回来。

假设深入做下去。你会发现要面对不同的网页要求。比方有认证的,不同文件格式、编码处理,各种奇怪的url合规化处理、反复抓取问题、cookies尾随问题、多线程多进程抓取、多节点抓取、抓取调度、资源压缩等一系列问题。

所以第一步就是拉网页回来,慢慢你会发现各种问题待你优化。

2.存储

抓回来通常会用一定策略存下来。而不是直接分析。个人认为更好的架构应该是把分析和抓取分离,更加松散,每一个环节出了问题可以隔离另外一个环节可能出现的问题,好排查也好更新公布。

那么存文件系统、SQLorNOSQL数据库、内存数据库。怎样去存就是这个环节的重点。你能够选择存文件系统開始,然后以一定规则命名。

3.分析

对网页进行文本分析。提取链接也好。提取正文也好,总之看你的需求。可是一定要做的就是分析链接了。能够用你觉得最快最优的办法。比方正則表達式。

然后将分析后的结果应用与其它环节:)

4.展示

要是你做了一堆事情。一点展示输出都没有,怎样展现价值?所以找到好的展示组件,去show出肌肉也是关键。

假设你为了做个站去写爬虫,抑或你要分析某个东西的数据。都不要忘了这个环节,更好地把结果展示出来给别人感受。

网络爬虫的定义

网络爬虫,即Web Spider,是一个非常形象的名字。

把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。

网络蜘蛛是通过网页的链接地址来寻找网页的。

从站点某一个页面(一般是首页)開始,读取网页的内容,找到在网页中的其他链接地址,然后通过这些链接地址寻找下一个网页。这样一直循环下去,直到把这个站点全部的网页都抓取完为止。假设把整个互联网当成一个站点,那么网络蜘蛛就能够用这个原理把互联网上全部的网页都抓取下来。

这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。

网络爬虫的基本操作是抓取网页。那么怎样才干随心所欲地获得自己想要的页面?

我们先从URL開始。

首先获取网页真正的url。简单的代码例如以下:

from urllib2 import Request, urlopen, URLError, HTTPError 

#导入urllib2模块。且直接使用Request。不须要urllib2.Request(from... import...)   

old_url = 'http://rrurl.cn/b1UZuP' #写入网页显示的地址 

req = Request(old_url)  

response = urlopen(req)    

print 'Old url :' + old_url  

print 'Real url :' + response.geturl()

执行这串代码,会报HTTPError:403错误。表示网站拒绝网络爬虫訪问。以下列出HTTP状态码:

HTTP状态码通常分为5种类型,分别以1~5五个数字开头。由3位整数组成:

------------------------------------------------------------------------------------------------

200:请求成功      处理方式:获得响应的内容,进行处理 

201:请求完毕。结果是创建了新资源。新创建资源的URI可在响应的实体中得到    处理方式:爬虫中不会遇到 

202:请求被接受,但处理尚未完毕    处理方式:堵塞等待 

204:server端已经实现了请求,可是没有返回新的信 息。假设客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃

300:该状态码不被HTTP/1.0的应用程序直接使用, 仅仅是作为3XX类型回应的默认解释。存在多个可用的被请求资源。    处理方式:若程序中可以处理。则进行进一步处理。假设程序中不能处理。则丢弃

301:请求到的资源都会分配一个永久的URL,这样就能够在将来通过该URL来訪问此资源    处理方式:重定向到分配的URL

302:请求到的资源在一个不同的URL处暂时保存     处理方式:重定向到暂时的URL 

304 请求的资源未更新     处理方式:丢弃 

400 非法请求     处理方式:丢弃 

401 未授权     处理方式:丢弃 

403 禁止     处理方式:丢弃 

404 没有找到     处理方式:丢弃 

5XX 回应代码以“5”开头的状态码表示server端发现自己出现错误,不能继续运行请求    处理方式:丢弃

这时候我们该怎么办呢?事实上非常easy,让爬虫伪装成正常IP訪问站点就能够攻克了。代码例如以下:

---------------------------------------

程序:twxs爬虫  

   版本号:0.1  

   作者:贪玩小神  

   日期:2015-07-29  

   语言:Python 2.7   

   功能:输出网站真实的url  

--------------------------------------- 

import urllib

import urllib2

#导入urllib。urllib2模块,不推荐使用from ... import ...

old_url = 'http://www.zhubajie.com/wzkf/th1.html'

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'

#设置初始值old_url,user_agent

#User-Agent : 有些server或 Proxy 会通过该值来推断是否是浏览器发出的请求,这里设置User-Agent来伪装成浏览器

values = {'name' : 'Michael Foord',

          'location' : 'Northampton',

          'language' : 'Python' }

headers = { 'User-Agent' : user_agent }

#初始化操作

data = urllib.urlencode(values)

req = urllib2.Request(old_url, data, headers=headers) 

#client向server发送请求

response = urllib2.urlopen(req)

#server对应client的请求

print 'Old url :' + old_url  

print 'Real url :' + response.geturl()


Python网络爬虫(一):初步认识网络爬虫的更多相关文章

  1. 【Python爬虫】01:网络爬虫--规则

    Python网络爬虫与信息提取 目标:掌握定向网络数据爬取和网页解析的基本能力. the website is the API 课程分为以下部分: 1.requsets库(自动爬取HTML页面.自动网 ...

  2. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  3. 【java爬虫】---爬虫+基于接口的网络爬虫

    爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...

  4. python爬虫:一些常用的爬虫技巧

    python爬虫:一些常用的爬虫技巧 1.基本抓取网页 get方法: post方法: 2.使用代理IP 在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP; 在urllib2包中有Pr ...

  5. PHP, Python, Node.js 哪个比较适合写爬虫?

    PHP, Python, Node.js 哪个比较适合写爬虫? 1.对页面的解析能力2.对数据库的操作能力(mysql)3.爬取效率4.代码量推荐语言时说明所需类库或者框架,谢谢.比如:python+ ...

  6. Python实现基于协程的异步爬虫

    一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python ...

  7. python(4): regular expression正则表达式/re库/爬虫基础

    python 获取网络数据也很方便 抓取 requests 第三方库适合做中小型网络爬虫的开发, 大型的爬虫需要用到 scrapy 框架 解析 BeautifulSoup 库, re 模块 (一) r ...

  8. 带你入门Python爬虫,8个常用爬虫技巧盘点

    python作为一门高级编程语言,它的定位是优雅.明确和简单. 我学用python差不多一年时间了, 用得最多的还是各类爬虫脚本, 写过抓代理本机验证的脚本.写过论坛中自动登录自动发贴的脚本 写过自动 ...

  9. 洗礼灵魂,修炼python(52)--爬虫篇—【转载】爬虫工具列表

    与爬虫相关的常用模块列表. 原文出处:传送门链接 网络 通用 urllib -网络库(stdlib). requests -网络库. grab – 网络库(基于pycurl). pycurl – 网络 ...

  10. Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

    最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效 ...

随机推荐

  1. 【URL重写】IIS7配置URL重写

    URL Rewrite Module   此模块适用于IIS7.7.5.8. 微软在IIS7中添加了URL的重写模块,并且免费使用,可以导入.htaccess规则,但需要安装. 第一步:安装URL2. ...

  2. Spring.Net学习笔记(0)-错误汇总

    1.错误一:ObjectDefinitionStoreException "Spring.Objects.Factory.ObjectDefinitionStoreException&quo ...

  3. eclipse中folder、source folder和package的区别

    今天做ssm项目时,突然发现了这个问题,特别好奇,sqlSessionFactory.xml文件如何找到: 1.放在src/hello目录下: InputStream inputStream = Re ...

  4. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...

  5. C# 字符串每隔两个 提取

    private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); str ...

  6. CAD把一个dwg文件,或者图像文件当着一个背景导入(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_OpenBackgroundFile 把一个dwg文件,或者图像文件当着一个背景导入.详细说明如下: 参数 说明 CString ...

  7. 13Microsoft SQL Server SQL 高级事务,锁,游标,分区

    Microsoft SQL Server SQL高级事务,锁,游标,分区 通过采用事务和锁机制,解决了数据库系统的并发性问题. 9.1数据库事务 (1)BEGIN TRANSACTION语句定义事务的 ...

  8. ionic3视频播放功能

    因为项目的需要,需要使用视频播放的功能,使用的是videogular2插件,但是报了一个无法识别video-player 这个标签,百度了很多,发现原来是版本 不对,ionic3是以来angular5 ...

  9. enote笔记语言(3)(ver0.4)

    章节:enote笔记语言(3)     what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取 ...

  10. 洛谷——P3373 【模板】线段树 2&& B 数据结构

    P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 线段树维护区间乘法 1.如何 ...