初步认识网络爬虫

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

 

在了解网络爬虫以前必定要牢记如下4个要点,这是作网络爬虫的基础:html

 

1.抓取正则表达式

 

py的urllib不必定去用,可是要学,若是你还没用过的话。比较好的替代品有requests等第三方更人性化、成熟的库,若是pyer不了解各类库,那就白学了。抓取最基本就是拉网页回来。数据库

 

若是深刻作下去,你会发现要面对不一样的网页要求,好比有认证的,不一样文件格式、编码处理,各类奇怪的url合规化处理、重复抓取问题、cookies跟随问题、多线程多进程抓取、多节点抓取、抓取调度、资源压缩等一系列问题。数组

 

因此第一步就是拉网页回来,慢慢你会发现各类问题待你优化。浏览器

 

2.存储服务器

 

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

 

那么存文件系统、SQLorNOSQL数据库、内存数据库,如何去存就是这个环节的重点。你能够选择存文件系统开始,而后以必定规则命名。网络

 

3.分析多线程

 

对网页进行文本分析,提取连接也好,提取正文也好,总之看你的需求,可是必定要作的就是分析连接了。能够用你认为最快最优的办法,好比正则表达式。而后将分析后的结果应用与其余环节:)

 

4.展现

 

要是你作了一堆事情,一点展现输出都没有,如何展示价值?因此找到好的展现组件,去show出肌肉也是关键。
若是你为了作个站去写爬虫,抑或你要分析某个东西的数据,都不要忘了这个环节,更好地把结果展现出来给别人感觉。

 

网络爬虫的定义

 

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

 

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

 

网络蜘蛛是经过网页的连接地址来寻找网页的。

 

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

 

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

 

网络爬虫的基本操做是抓取网页。那么如何才能为所欲为地得到本身想要的页面?

 

咱们先从URL开始。

 

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

 

?
1
2
3
4
5
6
7
8
9
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:服务器端已经实现了请求,可是没有返回新的信 息。若是客户是用户代理,则无须为此更新自身的文档视图。    处理方式:丢弃
300:该状态码不被HTTP/1.0的应用程序直接使用, 只是做为3XX类型回应的默认解释。存在多个可用的被请求资源。    处理方式:若程序中可以处理,则进行进一步处理,若是程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就能够在未来经过该URL来访问此资源    处理方式:重定向到分配的URL
302:请求到的资源在一个不一样的URL处临时保存     处理方式:重定向到临时的URL 
304 请求的资源未更新     处理方式:丢弃 
400 非法请求     处理方式:丢弃 
401 未受权     处理方式:丢弃 
403 禁止     处理方式:丢弃 
404 没有找到     处理方式:丢弃 
5XX 回应代码以“5”开头的状态码表示服务器端发现本身出现错误,不能继续执行请求    处理方式:丢弃

 

这时候咱们该怎么办呢?其实很简单,让爬虫假装成正常IP访问网站就能够解决了。代码以下:



?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
---------------------------------------
    程序:twxs爬虫 
    版本:0.1 
    做者:贪玩小神 
    日期:2015-07-29 
    语言:Python 2.7  
    功能:输出站点真实的url 
---------------------------------------
import urllib
import urllib2
#导入urllib,urllib2模块,不推荐使用from ... import ...
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 : 有些服务器或 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)
#客户端向服务器发送请求
response = urllib2.urlopen(req)
#服务器相应客户端的请求
print 'Old url :' + old_url 
print 'Real url :' + response.geturl()
相关文章
相关标签/搜索