• Python_爬虫


    爬虫介绍

    一、什么是爬虫?

      爬虫,学名叫网络蜘蛛,主要的功能是模拟人浏览记录网络信息,主要由三方面组成:抓取页面、分析页面和存储数据。

    二、为什么常见的是Python爬虫?

      其实任何语言都可以编写爬虫,但是Python有许多强大的功能库可以供我们使用,而且在数据处理方面,Python有众多方便的库可以直接调用。

    三、使用Python 编写爬虫中一些常见库的介绍。

      本部分主要介绍一些常用的库,让大家对爬虫总体有个初步的了解,以及知道解决什么问题,可以调用哪些库,对于具体库的安装使用,可参考官方文档或者崔庆才的博客:https://cuiqingcai.com/

      抓取页面:

        实现HTTP请求操作:

          Selenium            

            Github:https://github.com/SeleniumHQ/selenium/tree/master/py

            官方文档:http://selenium-python.readthedocs.io

            中文版:http://selenium-python-zh.readthedocs.io

            Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些JavaScript渲染的页面来说,这种

            抓取方式非常有效。

          Requests

            Github:https://github.com/requests/requests

            官方文档:http://www.python-requests.org

            中文文档:http://docs.python-requests.org/zh_CN/latest

            Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的

            编码,支持国际化的 URL POST 数据自动编码。

          aiohttp    

            Github:https://github.com/aio-libs/aiohttp

            官方文档:http://aiohttp.readthedocs.io/en/stable

                   提供异步Web服务的库,自动化测试工具,需要浏览器来配合使用;ChromeDriver驱动Chrome浏览器;GeckoDrive驱动Firefox浏览器。

       分析页面:

         从网页中提取信息。提取信息的方式有多种多样,可以使用正则来提取,但是写起来相对比较烦琐。这里还有许多强大的解析库,如lxmlBeautiful Souppyquery等。此外,还

         提供了非常强大的解析方法,如XPath解析和CSS选择器解析等,利用它们,我们可以高效便捷地从网页中提取有效信息。

          lxmlPython的一个解析库,支持HTMLXML的解析,支持XPath解析方式,而且解析效率非常高。

            GitHubhttps://github.com/lxml/lxml

           pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便。

            GitHubhttps://github.com/gawel/pyquery

            官方文档:http://pyquery.readthedocs.io  

        验证码:

          OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都

          是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容

          tesserocrPython的一个OCR识别库,但其实是对tesseract做的一层Python API封装,所以它的核心是tesseract。因此,在安装tesserocr之前,我们需

          要先安装tesseract

          GitHubhttps://github.com/sirfz/tesserocr

          下载地址:http://digi.bib.uni-mannheim.de/tesseract

          GitHubhttps://github.com/tesseract-ocr/tesseract

          tesseract语言包:https://github.com/tesseract-ocr/tessdata

          tesseract文档:https://github.com/tesseract-ocr/tesseract/wiki/Documentation

     存储数据:

               作为数据存储的重要部分,数据库同样是必不可少的,数据库可以分为关系型数据库和非关系型数据库。

        关系型数据库如SQLiteMySQLOracleSQL ServerDB2等,其数据库是以表的形式存储

                 MySQL: MySQL是一个轻量级的关系型数据库

        非关系型数据库如MongoDBRedis,它们的存储形式是键值对,存储形式更加灵活。

                 MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以

           包含 其他文档、数组及文档数组,非常灵活。

                 Redis是一个基于内存的高效的非关系型数据库

        存储数据的数据库提供存储服务,但如果想要和Python交互的话,还需要安装一些Python存储库,如MySQL需要安装PyMySQLMongoDB需要安

          装PyMongo等。RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,所以要安装RedisDump,需要先安装Ruby

    对于大规模爬虫构建与非Web网页爬虫使用到的技术:

      Web服务程序来搭建一些API接口,供爬虫使用。如:FlaskTornado

                 Flask是一个轻量级的Web服务程序,它简单、易用、灵活,这里主要用来做一些API服务。

               Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,它可以支撑成千上万的开放连接,效率非常高。 

      抓取App的数据App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于App没有浏览器这种可以比较直观地

        看到后台请求的工具,所以主要用一些抓包技术来抓取数据。本书介绍的抓包工具有Charlesmitmproxymitmdump。一些简单的接口可以通过Charles

        或mitmproxy分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用mitmdump对接Python来对抓取到的请求和响应进

        行实时处理和保存。另外,既然要做规模采集,就需要自动化App的操作而不是人工去采集,所以这里还需要一个工具叫作Appium,它可以像Selenium

        样对App进行自动化控制,如自动化模拟App的点击、下拉等操作。

     

         Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具。

           mitmproxy是一个支持HTTPHTTPS的抓包程序,类似FiddlerCharles的功能,只不过它通过控制台的形式操作。

         Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动AndroidiOS等设备完成自动化测试,比如模拟点击、滑动、输入

         等操作,官方网站为:http://appium.io/。 

    框架的使用:  

      直接用RequestsSelenium等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复

      用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了。利用框架,我们可以不用再去关心某

      些功能的具体实现,只需要关心爬取逻辑即可。有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。所以,如果有一定的基础,

      上手框架是一种好的选择。本书主要介绍的爬虫框架有pyspiderScrapy

        pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库

          后端、多种消息队列,另外还支持JavaScript渲染页面的爬取,使用起来非常方便。

          Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0lxml 3.4pyOpenSSL 0.14。在不同的平台环境下,它所依赖

            的库也各不相同,所以在安装之前,最好确保把一些基本库安装好。

          Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具。Scrapy-Splash的安装分为两部分。一个是Splash服务的安装,具体是通过Docker,安装之

            后,会启动一个Splash服务,我们可以通过它的接口来实现JavaScript页面的加载。

          另外一个是Scrapy-SplashPython库的安装,安装之后即可在Scrapy中使用Splash服务。

          Scrapy-RedisScrapy的分布式扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建。

       分布式:

           对于Scrapy来说,它有一个扩展组件,叫作Scrapyd,我们只需要安装该扩展组件,即可远程管理Scrapy任务,包括部署源码、启动任务、监听任务等。另外,还有

           Scrapyd-Client和Scrapyd

            API来帮助我们更方便地完成部署和监听操作。

            Docker集群部署。我们只需要将爬虫制作为Docker镜像,只要主机安装了Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。

           Scrapyrt为Scrapy提供了一个调度的HTTP接口,无需执行Scrapy命令而是通过请求一个HTTP接口来调度Scrapy任务了。Scrapyrt比Scrapyd更轻量,如果不需要分布式多

           任务的话,可以简单使用Scrapyrt实现远程Scrapy任务的调度。

           Gerapy是一个Scrapy分布式管理模块

    四、总结

       本文主要介绍了什么是爬虫,以及爬虫要实现的功能,还有一些常见的爬虫实现会涉及到的库。初次之外,因为爬虫涉及到的是网站数据的下载分析以及APP抓包数据分析,此部分内容后续另行补偿。

     

         2019-05-16

  • 相关阅读:
    xxx
    04消息队列zmq的发布者-订阅者的计算π的简单程序。
    03网络编程从之异步服务器
    03Python网络编程之多线程服务端。
    03Python网络编程之单线程服务端
    03Python网络编程之客户端。
    03Python网络编程系列之服务端
    02select监听客户端
    02select监听服务端
    07爬虫之-urllib总结
  • 原文地址:https://www.cnblogs.com/hazy-star/p/10873014.html
Copyright © 2020-2023  润新知