当前位置: 首页 > 后端技术 > Python

不懂Python爬虫?把这篇文章扔给他(包括框架结构)

时间:2023-03-26 16:25:30 Python

01我们第一次了解爬虫的概念和结构,我们只需要做一些简单的爬行工作,比如爬取百度百科进行纯信息展示,有哪些不需要登录的静态页面。而一些比较复杂的网页需要验证码、登录验证或者证书才能访问,但是再复杂的爬虫网页和爬虫框架,其实都离不开基本的爬虫架构。首先,我们需要一个爬虫调度终端来启动和停止爬虫。同时,我们还需要用它来监控爬虫的状态,为具体的数据应用提供接口。这部分不属于爬虫本身。图中方框内的部分就是我们的爬虫程序;因为有些页面有很多入口,我们可以通过不同的Python调度路径来访问这个接口,所以作为一个智能爬虫软件,当我们遇到传递URL的时候,应该选择过滤而不是再次爬行。URL管理器用于存放已经爬取的URL和待爬取的URL;从URL管理器中选择一个要抓取的URL,发送给网页下载器,下载器会将网页保存为字符串形式下载,并将该字符串交给网页解析器解析。一方面,网页解析器会提取你需要获取的值信息返回给调度器。另一方面,如果网页有新的URL需要抓取,它会将这个URL发送给URL管理器。然后这三个模块循环,直到爬取到所有与该网页相关的URL。对于上面的动态运行过程,可以使用下面更清晰的时序图,看起来更直观,参照上面的步骤就可以理解。爬虫会从一个特定的URL开始,自动访问其关联的URL,并提取我们需要的数据。这也是爬虫的价值所在:获取互联网上海量的数据为自己所用,并利用这些数据为产品服务。比如爬取一天内GitHub中浏览量和星级提升最高的项目。有了这些数据,就可以做一个GitHub开源项目推荐的项目了。现在各大网站的歌曲都受版权保护,下载歌曲不方便。通过歌曲名称可以抓取网上所有的免费下载链接,这样就可以很方便的做一个搜索下载歌曲的集群工具。可以说,只要有数据,就没有做不到的事情。用Python写爬虫,并不意味着只要掌握一门Python语言就可以搞定爬虫。要学的东西还有很多,Python只是作为通关的基础。而涉及到大型爬虫,还需要了解分布式、消息队列、常用数据结构和算法、缓存,甚至机器学习的应用等概念。爬虫需要依赖很多技术来支撑。如果你想更系统地学习Python爬虫知识,可以到公众号【Python编程学习圈】学习更多专业技术知识。Python学习者的宝藏!02Python基础学习电路图总结如下,可以作为基础入门的参考:03知识点分解关于爬虫学习的具体内容,我大致罗列了以下几个部分:(1)网络爬虫基础知识:爬虫基础知识定义爬虫功能Http协议基础抓包工具(Fiddler)使用(2)Python模块实现爬虫:urllib3、requests、lxml、bs4模块通用功能说明使用requests模块的get方法获取静态页面数据使用requests模块的post方法获取静态页面使用requests模块获取ajax动态页面数据使用requests模块模拟登录网站使用Tesseract进行验证码识别(3)Scrapy框架和Scrapy-Redis:Scrapy爬虫框架一般描述Scrapy蜘蛛类Scrapyitem和pipelineScrapyCrawlSpider类是通过Scrapy实现的-Redis分布式爬虫->scrapy框架1scrapy安装创建项目创建spider文件,编写parse方法scrapy子命令运行scrapy爬虫程序->scrapy框架2命令行传参进一步解析二级页面传参前parse方法导出json,csv格式数据scrapy爬虫状态保存->scrapy框架3item定义item使用pipeline使用pipeline存储items到mysqlscrapy整体架构->scrapy框架4downloader中间件使用downloader中间件实现IP代理池spider中间件scrapy插件scrapy-redis(4)借助自动化测试工具和浏览器爬取数据:Selenium+PhantomJS简单示例Selenium+PhantomJS网站登录Selenium+PhantomJS动态页面数据爬取(五)爬虫项目实战:使用requests写一个简单的爬虫来转化请求l爬虫是分布式爬虫的多线程版本。使用redis将多线程版本的爬虫改造成分布式的。1、基础阶段,刚入门??的时候,过一遍Python最基础的知识;比如:变量,数据结构,语法等等,知道怎么用函数,类,常用的数据结构比如list,dict中的常用方法,连基本的介绍都像下面这样:listdict:用来序列化的东西youcrawlSlices:用于对爬取的内容进行切分,并产生条件判断(if等):用于解决爬取过程中需要什么,不需要什么的问题。循环和迭代(forwhile):用于循环和重复爬虫动作。文件读写操作:用来读取参数,保存下来的内容等,这些都是你后续开发Python爬虫的基础,所以这部分还是很重要的。读完基础再做一些小项目巩固基础。如果你真的找不到任何练习项目,你可以在Codecademy上练习——以交互方式免费学习编码。如果时间充裕,可以买一本Python基础的书。在再次巩固基础的同时,你会发现很多边角边角是自己没有学过的。此步骤是对您的基础知识的补充。二是补充HTTP/HTTPS协议的基本原理知识,了解网站POSTGET的一些相关概念。HTTP规范虽然不能一本书写完,但是深入的内容以后可以慢慢看。还有就是网页的前端html、css、js这三个不能完全看懂。HTML不是一种编程语言,您只需要熟悉它的标记规则即可。大致了解这些就可以了。毕竟你要获取的数据在前端。如果你什么都不会,即使你学了Python,你也不知道从哪里去抓,也没用。当然是了解的越多越好,但是对于零基础的初学者,还是建议先掌握基础内容再深入扩展。2.框架学习Python爬虫的相关框架有很多,比如Requests、aiohttp、vibora、asks等,同学们可以根据自己的喜好选择。你可以学习任何你觉得舒服的。对于Python来说,只有requests显然是不够的。还需要了解scrapy和pyspider这两个框架。scrapy_redis还需要了解原理,如何搭建分布式系统,如何解决内存、速度等问题。3.数据处理我们获取网页数据后下一步就是对数据进行整理;因为你通过工具获取的数据不仅仅是你需要的数据,所有的数据都会混在里面,需要经过一定的规则。过滤和组织。4、防爬措施一定的防爬措施也是需要掌握的。大多数网站都会使用一些技术来防止爬虫,比如验证码、动态数据等,只有学习反爬虫技术,才能很好的获取这些数据。04梳理爬虫的工作思路下面我们来梳理一下爬虫的工作思路:使用Python爬取网页信息无非就是以下几点:1)会Python2)知道网页信息是如何呈现的3)了解网页是如何呈现的信息生成4)了解如何提取网页信息。如果你只是想写一个简单的爬虫,不要炫技,不要考虑爬虫的效率。过一遍下面:数据类型和变量字符串和代码使用list和tuple条件判断,循环使用dict和set你连函数都不需要掌握,异步、多线程、多进程,差不多就搞定了.假设你已经熟悉了Python最基本的知识,那么进入第二步:知道如何呈现网页信息?你首先需要知道你需要抓取的数据是如何呈现的。就网页信息而言,只有两种呈现方式:HTML和JSON;知道了数据是通过HTML和JSON呈现的,那么我们就进行第三步:数据是怎么来的?——发送请求,服务器反馈数据。这是什么要求?要弄清楚这一点,您需要了解http的基础知识。更准确地说,您需要了解GET和POST是什么以及有什么区别。requests可以模拟GET和POST请求;拿到数据后,我们需要从杂乱无章的数据中提取出我们需要的数据。这时候,我们有两个选择:①不管Python正则表达式再大再乱,即使是大海捞针,也能帮你捞出来。对于文本过滤或规则匹配,最强大的是正则表达式,它适用于结构化和非结构化数据的提取。对于一个网页,如果想知道该网页的源代码中有多少个URL,可以使用匹配该URL的正则表达式进行匹配。②BeautifulSoup(bs4)是一个借助网页的结构和属性解析网页的工具,可以自动转换代码。支持Python标准库中的HTML解析器,也支持部分第三方解析器。在灵活性方面,它比正则化差;数据被分析和提取,并被保存!两种常用的数据存储方式:存储为csv格式文件和存储为Excel文件。当爬回的数据量较小时,可以以文档的形式存储,支持TXT、json、csv等格式。当数据比较大的时候,就要用到Mysql、MongoDB等库。这里的数据存储比较简单,只要你熟练掌握主流的数据仓库即可。05进阶爬取要想提高你的爬虫的爬取效率,提高数据的准确性,就得进阶了。进阶就是学习分析一些复杂的对象,比如:淘宝、新浪微博登录、网易云的评论信息等。解析页面主要是选择使用哪个库或者哪个库的组合可以让解析速度更快;可能你一开始只是了解了bs库,你觉得它很好用,只要你写一个爬虫,代码是:importrequestsfrombs4importBeautifulSoupbs当然很好用,但是确实不是说能用正则表达式解析的页面就需要用bs,也不是说bs用lxml就可以解决,所以进阶的时候要考虑这些解析库的速度。我刚开始学习爬虫。一般爬取的结果只是打印出来。最后,只需将终端中输出的结果复制粘贴并保存即可。后来发现很麻烦,用xlwt/openpyxl/csv把存储的内容写到表里,然后用数据库sqlite/mysql/neo4j只要调用库就可以了,很简单,当然这是入口。高级开始学习如何选择合适的数据库,或者存储方式。当爬取的内容超过千万级时,如何设计让存储更快?比如同时存在人物关系和人物关系的时候,就必须用neo4j来存储关系,用myslq来存储用户信息。这样分离是因为如果所有的信息都存储在neo4j中,后期的存储速度会很慢。当你每一步都做得很好的时候,你应该考虑如何把这四个步骤结合起来,让你的爬虫达到最高的效率,这就是所谓的爬虫策略问题。学习爬虫策略不是一蹴而就的。推荐看一些比较优秀的爬虫设计,比如Scrapy。除了爬取策略之外,以下这些也是必须的;代理策略和用户策略代理是爬虫进阶必备技能;不同于入门阶段直接应用代理,高级阶段需要考虑如何设计和使用代理策略,何时更换代理,代理范围等。多用户爬虫策略考虑的基本是与代理策略、增量爬取和数据刷新相同的问题。比如你是从酒店网站上抓取酒店价格的信息,那么就会出现这些问题:酒店的房型价格每天都在变,酒店网站每天都会新增一批酒店,那么如何存储它以及如何处理它?数据刷新是应该考虑的事情。很多人都提到了验证码。我个人认为验证码不是爬虫要解决的主要问题。如果验证码不多,可以考虑在本地下载,自己输入验证码。如果有很多,可以考虑接入打码平台。以上大概分享了这么多。简单来说,爬虫程序其实主要是:发送G请求,获取数据,分析数据,保存数据。这四个部分看似简单,但实际上涉及的知识面很广,比如数据库、Web服务器、HTTP协议等诸多知识。想要用好爬虫,要学的东西很多,一步一步走总会赢的!对于迷茫的初学者来说,爬虫技术初级学习阶段最重要的是理清学习路径,摸清学习方法,这样后期的系统学习才会事半功倍。