Python_爬虫

Posted hazy-star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Python_爬虫的主要内容,如果未能解决你的问题,请参考以下文章

python_爬虫_模块

2.Python爬虫入门_requests

Python_爬虫

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具

Python_01_IP代理池_实现代理池的爬虫模块的及具体爬虫

Python爬虫(十三)_案例:使用XPath的爬虫