门户网站建设考核总结,怎么做二维码链接网页,站酷官网入口,长安公司网站设计一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架#xff0c;是python非常优秀的第三方库#xff0c;也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库#xff0c;而是一个爬虫框架。 爬虫框架#xff1a;是实现爬虫功能的一个软件结构和功…一、scrapy爬虫框架介绍 scrapy是一个功能强大的网络爬虫框架是python非常优秀的第三方库也是基于python实现网络爬虫的重要技术路线。scrapy不是哟个函数功能库而是一个爬虫框架。 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。 安装pip install scrapy 安装后小测scrapy -h scrapy的组成 在这五个模块之间数据包括用户提交的网络爬虫请求以及从网络上获取的相关内容在这些结构间进行流动形成了数据流 scrapy框架包含三条主要的数据流路径 第一条路径1、2从spiders到engine的地方获得了爬取用户的请求requestscheduler负责对爬取请求进行调度 第二条路径3-6首先engine从scheduler获得下一个要爬取的网络请求这个时候的网络请求是真实的要去网络上爬取的请求那么engine获得这样的请求后通过中间键发送给downloader模块downloader模块拿到这个请求后真实的链接互联网并且爬取相关的网页爬取到网页后downloader模块将爬取的内容形成一个对象这个对象叫响应response,那么将所有的内容封装成response后将这个响应再通过中间键engine最终发送给spiders. 第三条路径7、8首先spiders处理从downloader获得的响应它处理之后产生了两个数据类型一个数据类型叫爬取项item另外一个数据是新的爬取请求也就是说我们从网络上获得一个网页后如果这个网页有其他的链接也是我们十分感兴趣的那么我们就可以在spiders中增加相关的功能对新的连接发起再次的爬取。engine模块收到这两类数据之后将其中的item发送给item pipelines,将其中的request发送给sheduler进行调度从而为后期的再次处理以及再次启动网络爬虫请求提供新的数据来源。 整个框架的入口的spiders,出口是item pipelines. 其中engine,downloaders,scheduler已有实现用户只需编写item pipelines和spiderws。
二、scrapy爬虫框架解析 engine:这个模块是框架的核心。用于控制所有模块之间的数据流和根据条件触发事件进行触发。 downloader根据用户提供的请求来下载网页。它的功能比较单一只是获得一个请求并向网络中提交请求最终获得返回的相关内容。 scheduler对所有的爬取请求进行调度管理。 downloader middleware用户可以修改代码:目的为实施engine 、schedu;er、downloder之间进行用户可配置的控制。功能为修改、丢弃、新增请求或响应。 spider用户主要编写这部分的代码:解析downloader返回的响应response)产生爬取项scraped item),并且能产生额外的爬取请求。简单来说它向整个框架提供了最初始的访问链接同时对每次返回来的内容进行解析再次产生新的爬取请求并且从内容中分析出提取出相关的数据。 item pipelines需要用户编写配置代码:以流水线方式处理spider产生的爬取项。由一组操作顺序组成类似流水线每个操作是一个item pipeline类型。可能操作包括清理、检验和查重爬取项中的html数据、将数据存储在数据库中。 spider middleware用户可以编写配置代码目的为对请求和爬取项进行再处理。功能为修改、丢弃、新增请求或爬取项。
三、requests库与scrapy库的比较 相同点两者都可以进行页面请求和爬取Python爬虫的两个重要技术路线。两者的可用性都好文档丰富入门简单。两者都没有处理js、提交表单、应对验证码等功能可扩展的支持。 不同点爬取某个网页使用requests,爬取大量网页使用scrapy。 使用建议非常小的需求使用requests,不太小的需求使用scrapy框架定制程度很高的需求不考虑规模或自搭框架则requestsscrapy。一个爬虫能够持续的或者不间断的或者是周期性的爬取一个网站的信息并且这个数据的想你想我们希望去积累形成我们之间的爬取库这种情况适用scrapy框架。
三、scrapy爬虫的常用命令 scrapy是为了持续运行设计的专业爬虫框架提供操作的scrap用命令行。 工具在windows下通过command启动命令台(命令行更容易自动化适合脚本控制本质上scrapy是给程序员使用的并且输入命令scrapy -h scrapy命令行格式scrapy command [options] [args]。其中command是scrapy具体命令。 在scrapy框架下一个工程是最大的单元一个工程可以相当于大的scrapy框架而在scrapy中它可以有多个爬虫每一个爬虫相当于框架中的一个spider模块.
四、scrapy爬虫的第一个实例 演示HTML页面地址http://python123.io/ws/demo.html 文件名称demo.html 步骤如下 1、打开命令行然后切换到我们需要项目的位置例如切换到D则输入D 2、输入scrapy startproject python123demo用以创建一个名字为 python123demo的工程。 此时生成的工程目录如下python123demo为外层目录。scrapy.cfg用于部属scrapy爬虫的部属文件部属的概念是指将这样的爬虫放在特定的服务器上并且在服务器配置好相关的接口对于我们本机使用的爬虫来讲我们不需要改变部属文件。与scrapy/cfg同目录的python123ddemo是指scrapy框架的用户自定义python代码。_init_.py是初始化脚本用户不需要编写。items.py是items代码模板继承类这里也不需要用户编写。middlewares.py指的是middlewares代码模板继承类如果用户需要扩展middlewares那么就需要把这些功能写到这个文件当中。Pipelines.py对应pipelines代码模板继承类。seettings.py是scrapy爬虫的配置文件如果需要修改功能就需要修改对应的配置项。spiders是spiders代码模板目录继承类这个目录下存放的是python123demo这个工程中所建立的爬虫这些爬虫需要符合爬虫模板的约束。spiders下的_init_.py是初始文件无需修改若运行过的项目spiders下会多一个_pycache_为缓存目录无需修改。 3.进入工程在工程中产生一个scrapy爬虫命令为scrapy genspider demo python123.io这条命令的作用是生成一个名称为demo的spider。 这时候发现 在spider下生成了demo.py 以下为demo.py的内容
import scrapyclass DemoSpider(scrapy.Spider):name demo #说明当前爬虫的名字叫demoallowed_domains [python123.io]#最开始用户提交命令行的域名指的是这个爬虫在爬取网站的时候只能爬取这个域名下的相关链接。start_urls [https://python123.io]#后面以列表形式包含的多个url事实上就是scrapy框架所要爬取页面的初始页面def parse(self, response):#解析页面的空的方法用于处理响应解析内容形成字典发现新的url爬取请求,self是面向对象所属关系的标记pass4.用idle打开demo然后配置spiders
import scrapyclass DemoSpider(scrapy.Spider):name demo# allowed_domains [python123.io] 不需要 注释掉 start_urls [http://python123.io/ws/demo.html]def parse(self, response):fname response.url.split(/)[-1] #这里面我们从响应的url中提取文件的名字作为我们保存为本地的文件名然后我们将返回的内容保存为文件with open(fname,wb) as f: # 返回的内容保存为文件f.write(response.body)self.log(Saved file %s. % name) 5.执行项目在命令行输入scrapy crawl demo捕获的页面将被存储在demo.html文件中 yield关键字的使用 yield与“生成器”息息相关。 生成器是一个不断产生值的函数。包含yild语句的函数是一个生成器。生成器在每次产生一个值yield语句函数被冻结被唤醒后再产生一个值。而唤醒后它所产生的局部变量的值跟之前执行所使用的值是一致的。也就是说一个函数执行到某个位置然后它被冻结再次被唤醒的时候还是从这个位置继续去执行那么每次执行的时候它就可能产生一个数据这样这个函数就不停的执行。 生成器大部分与循环一起出现这样我们就可以使用一个for循环调用生成器。 使用生成器的好处更节省存储空间响应更迅速使用更灵活。
五、scrapy爬虫的基本使用 步骤1.创建一个工程和soider模板 。2、编写spider 。 3、编写item pipeline . 4、优化配置策略。 涉及的三个类request类、response类、item类 request:class.scrapy.http.Request()。request对象表示一个http请求。由spider生成由downloader执行。 resopnseclass.scrapy.http.Response()。response对象表示一个http响应。由downloader生成由spider处理。 itemclass.scrapy.http.Item()。Item对象表示一个从HTML页面中提取的信息内容。由spider生成由item pipeliner处理。item类似字典类型可以按照字典类型操作。 scrapy爬虫提取信息的方法:beautiful Soup,lxml,re,xpath selectorCSS selector。 CSS selector格式html.css(a::attr(href)).extract()