一个小爬虫的整体解决方案
技术栈:Python+Selenium/Scrapy框架+Tor(代理)
大家好,今天我带来的主题叫做一个小爬虫的整体解决方案,其实一开始决定做这个主题的时候,主要是觉得在团队中,我有这样一个机会可以完成之前想做但是没能做的事情,就想拿出来和大家分享这个技术,这样以后大家遇到此类问题或者想去研究爬虫的时候,能够少走一些弯路和少踩一些坑,同样的,我也希望大家也能把自己觉得可以分享的技术,拿出来大家一起探讨,好吧,那我就先抛个砖,希望能把大家的玉都引出来。如果在讲解的过程中,大家有任何的疑问,随时可以打断我进行交流,如果我不会的,我下来寻求了答案,大家再一起交流,好吧,那我就先开始今天的主题。
说到爬虫,我想大家都不会陌生,我找了一段百度百科对于爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。简单的说就是用程序去获取网站数据,这里的数据包括网页代码和服务器返回的数据,我们把获取到的数据进行保存和分析。关于这些理论的东西网上都能很容易查到,而且都是仁者见仁智者见智,大家可以自己上网去查看。那么我们如何用程序来制作爬虫呢?从拿到这个项目之初,我查阅了一些资料,也请教了有过爬虫经验的Peter,最终大概定了一个项目的技术栈,就是用Python语言+Selenium/Scrapy框架+Tor(代理)进行项目开发。
说到爬虫的开发语言,我一直以为Python是专门做爬虫的,后来这次我正好也去了解了下,才发现其实Python本身也是一门程序语言,和Java,.Net一样可以做任何高级语言能做的事情,比如Web开发、人工智能、桌面界面开发、后端开发,当然爬虫只是其中技能之一,所以其实如果想通过这一个项目就把Python学习,那就可以出门右转了,当然如果有其它语言基础的加成,可以让我们更好的了解熟悉python语法,便于我们进行快速开发,所以我大概花了2个小时左右的时间熟悉了一下python语法,结合在后面做爬虫用到的一些高频语法,我选取了几个知识点和javascripy做一下对比,一定意义上来说python属于后端语言,和javascripy不能放在一起类比,但是即便如此,其实也能看到编程语言的一些共通性,所以我还是很厚脸皮的拿来比较。
首先安装python:
1、windows下安装python和pip,安装python.exe,然后加入环境变量。
2、Linux安装python3和pip3,主要是讲下默认python和python3之间的关系,在后面部署云的时候再讲。
相同的:对象和数组的引用、函数和class,import引入
不同的:
1、if-else语法
2、判断是否包含字符串
3、字符不能和数字直接相加,要用str转
4、数组相加,js相加成了字符串,python可以数组直接相加生成新的数组
5、数组的截取,js是用slice,python是用[:]
当然python是一门比较博深的语言,上面只是其中的几个点,如果有兴趣的同事可以去再仔细研究,在这里我们就不做过多的交流,当我们把python语法了解了之后,我就在想我应该如何选择一个框架去承载爬虫,这个时候我和测试Zalen交流了下,感觉可以从Selenium入手,因为Selenium主要还是做自动化测试这块的东西,我也本着多学习不吃亏,不懂就去打个擦边球的心态,想把Selenium当作第一块骨头来啃,Selenium的定义主要还是一个自动化测试工具,因为可以模拟浏览器的操作,所以也可以做一些比较复杂的爬虫功能,比如说我们需要通过对浏览器进行比较复杂的交互才能获取到的爬虫数据,我们就可以通过Selenium来进行爬虫,Selenium可以帮助我们启动一个浏览器进行交互,下面我就来简单演示一个Selenium的程序,大家一看便知。Selenium还有一个比较好的优势就是可以爬一些动态加载数据的网页,这个我们可以把后面的Scrapy讲了一起再来对比。大家都看刚才的例子有没有发现,其实就算我们用无头浏览器的方式,Selenium的效率其实也是比较低的,那么我又去搜索了专门做爬虫的框架,经过粗略的对比,最终选择了Scrapy作为开发框架,当然也还有其他很多好的框架可以选择,如果有兴趣,我们也可以在后面进行交流。
下面我们来大概聊一下Scrapy,Scrapy 是一套基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片。下面我们来演示一下如何在本地建立一个Scrapy项目,1、安装python环境;2、安装pip;3、pip install scarpy;(python版本>=3.5)4、scrapy startproject bookSpider,就完成了Scrapy项目的创建。
然后我们来看一下Scrapy的项目结构,主要就是settings.py,items.py,pipelines.py,然后就是spiders文件夹的内容,这里也是主要写爬虫的文件,在我们大概了解了项目目录之后,我们需要再来了解一下scrapy的运行原理和流程,
https://blog.csdn.net/qq_34120459/article/details/86711728
Scrapy是单item存数据库,结合和我自己为什么要在spider进行多条数据的存储一起传分析说明。
扩展知识:Tor(洋葱网络)的使用,Tor的定义:Browse Privately.
Explore Freely.Defend yourself against tracking and surveillance. Circumvent censorship.(私密浏览.自由探索.防止你被追踪和监视。避开网络审查。)我们在进行频繁请求造成被对方服务器封掉IP的时候,我们可以通过使用Tor来隐藏我们真实ip,并分配给我们一个通过几层代理转换过的外网ip重新请求。下面我们就来说如果运用Tor.
1、windows安装tor:
1)下载Tor源码:https://www.torproject.org/download/;
2)下载Vidalia图形界面化工具来使用Tor,下载地址(vidalia-standalone-0.2.21-win32-1_zh-CN.exe):https://people.torproject.org/~erinn/vidalia-standalone-bundles/
打开vidalia软件,设置tor路径,就是第1步下载解压出来的tor.exe文件。然后就可以连接网络了。当连接成功之后,我们就可以更换身份,这里有一点需要注意的是国内网络使用Tor必须要先FQ。
下载http代理软件Polipo(polipo-1.1.0-win32.zip):http://www.pps.univ-paris-diderot.fr/~jch/software/files/polipo/
编辑解压后的文件config.sample在文件的开头加上以下配置:
socksParentProxy = "localhost:9050"
socksProxyType = socks5
diskCacheRoot = ""
使用cmd命令运行该目录下的程序:polipo.exe -c config.sample
通过系统代理设置localhost:8123
通过https://check.torproject.org/或者http://icanhazip.com/验证ip地址。
2、Linux安装Tor
pip install tor;pip install privoxy;
最后我们来把项目部署上云服务器:
1、yum install git 、git clone XXXX
2、pip install scrapy
3、pip install bs4;pip install stem;pip install requests;pip install pysocks
4、scrapy crawl spider-name或者运行定时任务。
5、Over!!!