一次性付费进群,长期免费索取教程,没有付费教程。
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
▼
网络爬虫,可以简单地理解为使用某种编程语言(例如Python语言)按照一定的顺序、规则主动抓取互联网特定信息的程序或者脚本。
▼
涉及网络时,必不可少的模块就是urllib了。顾名思义,这个模块主要负责打开URL和HTTP协议之类的。这个模块就是Python 2标准库中的urllib2模块的升级版。
▼
logging模块,顾名思义就是针对日志的。到目前为止,所有的程序标准输出(输出到屏幕)都是使用的print函数。logging模块可以替代print函数的功能,并能将标准输出输入到日志文件保存起来,而且利用logging模块可以部分替代debug的功能,给程序排错。
▼
re模块是文件处理中必不可少的模块,主要应用于字符串的查找、定位等。在使用网络爬虫时,即使没有爬虫框架,re模块配合urllib模块也可以完成简单的爬虫功能。先来看看所谓的正则表达式,以下是Python支持的正则表达式元字符和语法。
▼
sys模块,顾名思义就是跟系统相关的模块,这个模块的函数方法不多。最常用的就只有两个。sys.argv和sys.exit。sys.argv返回一个列表,包含了所有的命令行参数;sys.exit则是退出程序,再就是可以返回当前系统平台。
▼
Python中的time模块是跟时间相关的模块。这个模块用得最多的地方可能就是计时器了。
▼
Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
▼
从这个项目可以看出,Scrapy爬虫只需要顺着思路照章填空就可以了。如果需要的项比较多,获取内容的网页源比较复杂或者不规范,可能会稍微麻烦点,但处理起来基本上都是大同小异的。与re爬虫相比,越复杂的爬虫就越能体现Scrapy的优势。
▼
做个所需项目多一点的爬虫,并将爬虫的结果以多种形式保存起来。
▼
从网站上获取免费的代理服务器。使用Scrapy获取代理服务器后,一一验证哪些代理服务器可用,最终将可用的代理服务器保存到文件。
▼
使用得到的代理来爬取网站内容,目标站点就定为一个笑话网站糗事百科。
▼
对于一般用户而言,网络爬虫是个好工具,它可以方便地从网站上获取自己想要的信息。可对于网站而言,网络爬虫占用了太多的资源,也没可能从这些爬虫获取点击量,增加广告收入。据有关调查研究证明,网络上超过60%以上的访问量都是爬虫造成的,也难怪网站方对网络爬虫恨之入骨,“杀”之而后快了。
网站方采取种种措施拒绝网络爬虫的访问,而网络高手们则毫不示弱,改进网络爬虫,赋予它更强的功能、更快的速度,以及更隐蔽的手段。在这场爬虫与反爬虫的战争中,双方的比分交替领先,最终谁会赢得胜利,大家将拭目以待。
▼
网络爬虫最终的目的就是过滤选取网络信息,因此最重要的部分就是解析器了。解析器的优劣决定了网络爬虫的速度和效率。Beautiful Soup除了支持Python标准库中的HTML解析器外,还支持一些第三方的解析器。
▼
经常在网上追剧,偶尔也在百度贴吧上看看美剧贴,可又比较懒,天天登录贴吧查看贴子觉得很麻烦。干脆就写个爬虫让它自动爬内容好了,有空就看看哪些帖子回复了,又有哪些新贴。这里以百度贴吧里的“权利的游戏吧”为例。
▼
在国内,唯一能合法暴富的方法似乎只有彩票中奖了。虽然人人都知道中奖的概率很低,但希望总是存在的。中奖的号码虽然无法直接推算出来,但根据概率计算将中奖的概率稍微调大点那还是可能的。在进行概率计算前要做的就是收集数据,好在中国福利彩票并不禁止收集数据进行概率计算。如何计算概率不是本文的内容,这里只负责将数据收集后存入到数据库中。
▼
使用bs4爬虫获取起点中文网所有的完本小说信息,并将其保存到MySQL中去。
▼
影视网站会每天都有新的电影上架,限于页面的篇幅,每页显示的电影有限。如果想找一部心仪的电影恐怕得翻遍整个网站,当然也可以使用百度的高级搜索和网站自身的搜索,但最方便的还是自己写个爬虫,每天让它爬一次,就可以知道有什么新电影上架了。
▼
既然要反反爬虫,那就要反个彻底。在Scrapy里曾提过反爬虫的运行机制,基本上就是通过IP、headers来锁定爬虫用户,然后进行封锁(用验证码、验证图案的不在讨论范围中)。Scrapy使用的是随机跳转proxy和headers的方法对付反爬虫。这里也是如此(反反爬虫的手段远不止这些,比如使用专门网站爬虫、分布式爬虫都可以。个人用户没什么特殊要求,做到这一步就差不多了)。
▼
Mechanize是Python的一个模块,用于模拟浏览器。Mechanize的易用性和实用性比较平衡,功能强大而又简单易用。
▼
使用urllib2可以比较方便地处理那些无须验证码的登录页面,不过使用Mechanize登录更加方便。
▼
有些网站或论坛为了防止暴力破解,在登录框设置了一个验证码。有坚固的盾就有锐利的矛,目前针对验证码的解决方案可谓是千奇百怪。有些方案的确有效,但不具备普遍性。考虑到爬虫所需要的只是数据,完全可以绕过验证码,直接使用Cookie登录就可以了。
▼
Python网络爬虫中最麻烦的不是那些需要登录才能获取数据的网站,而是那些通过JavaScript获取数据的站点。Python对JavaScript的支持不太好。想用Python获取网站中JavaScript返回的数据,唯一的方法就是模拟浏览器了。这个模拟浏览器跟Mechanize模块稍有不同,Mechanize模块并不支持JavaScript,所以这里需要一款可以模拟真实浏览器的模块——Selenium模块。
▼
Selenium和PhantomJS配合,可以模拟浏览器获取包括JavaScript的数据。不单要获取网站数据,还需要过滤出“有效数据”。Selenium本身带有一套自己的定位过滤函数。它可以很方便地从网站返回的数据中过滤出所需的“有效数据”。
▼
用Selenium&PhantomJS完成的网络爬虫,最适合使用的情形是爬取有JavaScript的网站,但用来爬其他的站点也一样给力。在Scrapy爬虫中曾爬取过代理服务器的例子,这里再以Selenium&PhantomJS爬取代理服务器为示例,比较两者有什么不同。
▼
Selenium&PhantomJS可以说是专为JavaScript而生的。本文学习使用Selenium&PhantomJS获取JavaScript返回的数据。一般来说,网站上用JavaScript返回数据,主要是为了美观,第二个目的估计就是增加爬虫的难度了。
▼
Pyspider爬虫框架是一个由国人设计开发的Python爬虫框架。与其他爬虫框架不同的是Pyspider不需要任何编辑器或者IDE的支持。它直接在Web界面,以浏览器来编写调试程序脚本。在浏览器上运行、起停、监控执行状态、查看活动历史、获取结果。Pyspider支持MySQL(MariaDB)、MongoDB、SQLite等主流数据库,支持对JavaScript的页面抓取(也是靠的PhantomJS的支持),重要的是它还支持分布式爬虫的部署,是一款功能非常强大的爬虫框架。
▼
Pyspider爬虫框架上手比较简单,即使没有使用过其他的爬虫框架,只要略通Python,也可以很方便地创建爬虫。写一个Pyspider爬虫,选择一个最简单的目标,即爬取Youku影视中的热剧榜单。
▼
编写一个完整的“纯粹的”Pyspider项目。选一个简单的项目,在电影下载网站爬取所有的欧美影片的下载地址。
▼
▼
▼
简单的爬虫基本上就是直来直去地从静态页面获取数据、清洗数据,几乎都是在Request的headers里做手脚。稍微复杂一点的爬虫,则是通过伪造Cookies或者使用浏览器内核从网站获取数据。到这一步就差不多把爬虫获取数据的路子走到头了。非要更进一步,那就只有使用代理池轮询这种终极手段了。
ID:Computer-network