python爬虫

详细资料可以看慕课网:https://www.imooc.com/video/10690

一:爬虫

    一段自动抓取互联网信息的程序

    爬虫从一个url出发,访问所有的url,并且从每个页面提取,所需要的有价值的数据

     价值:比如我也做一个美女网,把网上所有的美女图片放在一个网站上。

二:简单爬虫架构:

    1: 爬虫调度段

    2:Url管理器:从管理器中可以取到一个待爬取的url。将其传送给网页下载器

   3:网页下载器:网页下载器会将url指定的网页下载下来存储成一个字符串,将这个字符串传送给网页解析器

   4:网页解析器:网页解析器会将这个字符串解析。会解析出有价值的数据和指向其他网页的url,这些url可以再补充给url管理器。他们会组成一个循环,只要有url就会一直循环下去

三:爬虫架构运行流程:

      调度器:调度器会询问有没有url管理器,有没有要爬取的Url,如果有,将这个url传送给下载器。

      管理器:返回是和否,如果是,返回一个待爬取的url。

      下载器:下载器得到url,会根据内容下载,下载好后,将内容返回给调度器,调度器会将内容再传送给解析器

      解析器:解析器解析后,会将价值数据和新的url列表,返回给调度器,此时调度器会做两件事:第一将价值数据传送给应用,进行数据的收集,第二会将新的url列表补充到url管理器,以此循环,直到所有的url都爬取完。

     最后调度器会将应用的方法,进行输出,将价值数据输出到我们需要的格式

四:url管理器

     url管理器管理待抓取的url集合,和已抓取的url集合,对url管理是为了防止重复抓取,和循环抓取

      url会做两个判断:

                   在将新的url添加到爬取集合中时,会判断待添加url是否在容器中。

                   判断是否还有待爬取的url

      最后url爬取完,会将这个url移动到已爬取集合

五:url管理器实现方式

      1:如果采用python语言,选用set集合,set集合可以去除重复的元素

      2:关系型数据库:如myslq

      3:缓存数据库:如redis

六:网页下载器(核心)

     网页下载器是将互联网上的url对应的网页下载到本地的工具,类似于浏览器

     他将url对应的网页以html的格式存储到本地文件或内存字符串

     python下载器:urllib2。python官网基础模块,他支持直接的url下载,还支持登录网页的cookie处理,需要代理访问的代理处理

    request:python第三方插件

七:  urlib2介绍:urllib2有三种下载网页的方法

              1:将url传送给urllib2.urlopen(url),返回的内容传送给response对象。  response= urllib2.urlopen(request),然后用response的response.code方法,返回一个状态码,根据状态码判断是否成功。同时可以使用responde的responde.read()方法读取内容。

                          import urllib2
                          import cookielib

                        url = "http://www.baidu.com"
                        print '第一种方法'
        response1 = urllib2.urlopen(url)
        print response1.getcode()
        cont = response1.read()

              2:添加data,httpheader。现在就有了三个参数,将这三个参数传给urllib2的urllib.request方法,返回一个request对象,然后仍然使用response= urllib2.urlopen(request)

       例:import urllib2

                             values = {"username":"1016903103@qq.com","password":"XXXX"}
                             data=urllib.urlopen(values)
                             url="https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
                             request=urllib2.Request(url,data)
                             response= urllib2.urlopen(request)
                             print response.read()

              3:添加特殊情境的处理器:

                  因为有些网页需要用户登录才能访问,我们需要添加cookie的处理,那现在可以使用HTTOPCookieProcessor。如果是需要代理的网页则使用:ProxyHandler。

                  如果是使用https加密访问的则使用:HTTPSHandler

                 最后将这些handler传送给urllibl2.build.opener(handler)方法,返回一个opener对象,然后urllib2.install_opener(opener),然后继续使用urllib2.urlopen(request)方法

       import urllib2
       import cookielib

      #创建cookie容器
      cj = cookielib.CookieJar()

      #创建一个opener
      opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

      #给urllib2安装opener
      urllib2.install_opener(opener)
      #使用待cookie的urllib2访问网页
      response = urllib2.urlopen("http://www.baidu.com")

 

 

posted @ 2017-12-05 19:34  warmpan  阅读(122)  评论(0编辑  收藏  举报