zoukankan      html  css  js  c++  java
  • 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")

     

    严于律己,宽恕待人。
  • 相关阅读:
    http与websocket(基于SignalR)两种协议下的跨域基于ASP.NET MVC--竹子整理
    让Visual Studio 2015 支持ASP.NET MVC4.0.0.1
    自定义滚动条CSS样式
    使用NuGet发布自己的类库包(Library Package)
    基于EF的数据外键关联查询
    基于EF创建数据库迁移
    用SQL命令查看Mysql数据库大小
    Python之MySQL数据操作
    Python之MySQL基础
    Python网络编程之黏包问题
  • 原文地址:https://www.cnblogs.com/panshujun/p/7988976.html
Copyright © 2011-2022 走看看