zoukankan      html  css  js  c++  java
  • 初步认识网络爬虫

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

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

    1.抓取

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

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

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

    2.存储

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

    那么存文件系统、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()
  • 相关阅读:
    分享自Allen 《打开excel,word发送没反映OUTLOOK无法打开》
    AD域只禁用USB存储器而开放其他USB设备
    sql2000安装sp4补丁包教程_sql2000sp4
    为帮助保护您的安全,Internet Explorer已经阻止从此站点下载文件
    IExplore.exe应用程序错误解决方法
    单网卡双IP,同时上内外网
    关于
    七伤拳
    <转>在外企混的,一定要懂“外企潜台词”
    习惯
  • 原文地址:https://www.cnblogs.com/CQ-LQJ/p/4910046.html
Copyright © 2011-2022 走看看