南宁网站设计方法,胶南网络推广,自己怎么建购物网站,网站静态首页模板目录
Scrapy基础入门篇
Scrapy下载安装
Scrapy爬虫工作流程#xff1a;
Scrapy 框架由五大组件构成
创建scrapy爬虫项目
scrapy项目创建#xff0c;编写步骤
步骤一#xff1a; 创建项目#xff1a;在对应项目目录下创建scrapy项目。使用 scrapy startproject 项目名…目录
Scrapy基础入门篇
Scrapy下载安装
Scrapy爬虫工作流程
Scrapy 框架由五大组件构成
创建scrapy爬虫项目
scrapy项目创建编写步骤
步骤一 创建项目在对应项目目录下创建scrapy项目。使用 scrapy startproject 项目名比如D:\python_spider_learning\spide_project\scrapy_project\learning在这个文件夹下创建
步骤二进入项目cd 项目名称。或者在pycharme中选中文件夹Terminal
步骤三创建爬虫命令创建爬虫scrapy genspider 爬虫名称 域名scrapy genspider xiao 4399.com(gen:生成)
步骤四可能需要修改start_url,修改成需要抓取的页面
步骤五对数据进行解析。在spider里面的parse(response)方法中进行解析
步骤六在Pipeline中完成数据的存储工作。
步骤七设置settings.py文件将Pipeline进行生效设置
步骤八运行项目scrapy 命令scrapy crawl 爬虫名 scrapy crawl xiao运行后会打印出日志。
数据解析
在spider里面的parse(response)方法中进行解析scrapy中xpath和css可以混合用
用xpath和css混合解析
在Pipeline中完成数据的存储工作
设置settings.py文件将Pipeline进行生效设置
运行项目 Scrapy基础入门篇 Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架该框架使用纯 Python 语言编写。Scrapy 框架应用广泛常用于数据采集、网络监测以及自动化测试等。
提示Twisted 是一个基于事件驱动的网络引擎框架同样采用 Python 实现。
本文主要讲述Scrapy爬虫工作流程以及创建scrapy爬虫项目。
Scrapy下载安装 Scrapy 支持常见的主流平台比如 Linux、Mac、Windows 等因此你可以很方便的安装它。本节以 Windows 系统为例
python -m pip install Scrapy **pycharme**直接安装Scrapy。这种安装方式有时会报错特别是在创建虚拟环境时有可能安装成功也找不到scrapy这时需要将虚拟环境下创建的\venv\Scripts添加到环境变量中。可能运行会很慢
由于 Scrapy 需要许多依赖项因此安装时间较长大家请耐心等待关于其他平台的安装方法可参考官方文档《Scrapy安装指南》。
Scrapy爬虫工作流程 Scrapy 框架由五大组件构成 如下所示
在整个执行过程中还涉及到两个 middlewares 中间件分别是下载器中间件Downloader Middlewares和蜘蛛中间件Spider Middlewares它们分别承担着不同的作用 蜘蛛中间件 (Spider Middlewares) 位于引擎与爬虫文件之间它主要用来修改响应对象的属性 Scrapy 工作流程示意图如下所示 不包含中间件
上述示意图描述如下当一个爬虫项目启动后Scrapy 框架会进行以下工作 1.引擎找到spider在spider中找到起始url第一个待爬取的 URL。 2.url被引擎包装成request对象。 3.引擎将reques对象传递给调度器。 4.调度器Scheduler通过引擎将response对象传递给Downloader。 5.Downloader将得到的response对象通过引擎送回给spider。 6.spider解析解析返回的response对象通过xpath、json、re、css等。 7.spider将数据通过引擎传递给pipeline存储数据。若有新的url比如下一页等重复2-7步骤。
创建scrapy爬虫项目 Scrapy 框架提供了一些常用的命令用来创建项目、查看配置信息以及运行爬虫程序。常用指令如下所示 scrapy项目创建编写步骤 步骤一 创建项目在对应项目目录下创建scrapy项目。使用 scrapy startproject 项目名比如D:\python_spider_learning\spide_project\scrapy_project\learning在这个文件夹下创建 1.注意直接在pycharm里安装scrapy后scrapy startproject 项目名会报错这是可以把对应虚拟环境的scripts添加到环境变量中如D:\python_spider_learning\spide_project\venv\Scripts 2.分析创建文件里的每一个文件含义 a.图片中第一个game就是我们刚才使用命令创建项目时的项目名scrapy startproject 项目名。是整个项目所在文件夹点开有两个文件game和scrapy.cfgb.第二个game是项目的根目录后面导包都是在这个里。scrapy.cfg描述了一些设置以及部署这个不能删除。c.点开根目录game有6个文件分别是spiders文件夹__init__.py,items.py,middlewares.py,pipelines.py,settings.py。spiders文件夹:是scrapy框架模块中的spiders爬虫数据解析都在这里。__init__.py:items.py:为了scrapy去封装比较大的数据时用到。middlewares.py:中间件处理反爬cookie等pipelines.py:管道存储数据。settings.py对整个scrapy或者当前项目整体的配置信息。 步骤二进入项目cd 项目名称。或者在pycharme中选中文件夹Terminal
步骤三创建爬虫命令创建爬虫scrapy genspider 爬虫名称 域名scrapy genspider xiao 4399.com (gen:生成) 步骤四可能需要修改start_url,修改成需要抓取的页面 步骤五对数据进行解析。在spider里面的parse(response)方法中进行解析 parse()该方法是XiaoSpider继承scrapy.Spider中的parse()所以该方法不能修改名称11行旁边的圆圈就表示该方法可以重写
def _parse(self, response, kwargs):父类中还有kwargs。但是子类最开始进来时没有**kwargs参数所以会显示黄色警告之后可能会报错。 def parse(self, response):修改成def parse(self, response, **kwargs):response.text 源代码response.json()返回数据是jsonresponse.xpath()response.css()
解析数据时需要注意默认xpath()返回的是Selector对象。
想要数据必须使用extract()提取数据。
extract()返回列表
extract_first()返回一个数据yield 返回数据 --》把数据交给Pipeline进行持久化存储 步骤六在Pipeline中完成数据的存储工作。 class 类名():类名可以自己取。 def process_item(self, item, spider):这个不能修改。 item是数据 spider是爬虫 return item #必须要return东西否则下一个管道收不到数据。最后一个管道可以不写return
步骤七设置settings.py文件将Pipeline进行生效设置 ITEM_PIPELINES { “管道路径”: 优先级,优先级数越小越高越先执行 }
如ITEM_PIPELINES { game.pipelines.GamePipeline: 300, }
步骤八运行项目scrapy 命令scrapy crawl 爬虫名 scrapy crawl xiao运行后会打印出日志。 如果不想看日志打开settings.py添加LOG_LEVELWARNING #设置成WARNING是指只打印WARNING及以上级别的日志。 #日志级别DEBUGINFOWARNINGERRORCRITICAL等级从低到高
scrapy案例 创建项目
scrapy startproject game
创建爬虫 进入scrapy创建项目文件夹中
scrapy genspider 爬虫名称 域名scrapy genspider xiao 4399.com可能需要修改start_url,修改成需要抓取的页面
start_urls [https://4399.com]修改成
start_urls [https://www.4399.com/flash/]数据解析 在spider里面的parse(response)方法中进行解析 scrapy中xpath和css可以混合用
import scrapy
from game.items import GameItemclass XiaoSpider(scrapy.Spider):#scrapy.Spider是继承scrapy中的spiders模块不要去修改name xiao#爬虫名字allowed_domains [4399.com]#被允许的域名start_urls [https://www.4399.com/flash/]#修改后的urldef parse(self, response, **kwargs):#拿到页面源代码#print(response.text)#response.json()返回数据是json#利用浏览器的xpathtxt response.xpath(//*[idskinbody]/div[8]/ul/li/a/b/text()).extract() # 用xpath进行数据解析,用extract()提取选择器里的数据print(txt)#自己根据html写xpathtxt1 response.xpath(//ul[classn-game cf]/li/a/b/text()).extract() # 用xpath进行数据解析,用extract()提取选择器里的数据print(txt1)#分块提取循环li_list response.xpath(//ul[classn-game cf]/li)for li in li_list:nameli.xpath(./a/b/text()).extract_first()#extract_first()提取一项内容如果没有返回NONEurl https://www.4399.com li.xpath(./a/href).extract_first() # extract_first()提取一项内容如果没有返回NONEsrchttps:li.xpath(./a/img/lz_src).extract_first()category li.xpath(./em/a/text()).extract_first()date li.xpath(./em/text()).extract_first()scrapy中当数据量或者字段较多管道较多时直接用字典存储可能后续会报错有时报错也找不到具体在哪里。因此聪明的方法就是利用items.py文件。items.py修改1.在class类中定义存储的key值。class GameItem(scrapy.Item):#name scrapy.Field()这个定义后name相当于dict中的key。name scrapy.Field()url scrapy.Field()src scrapy.Field()category scrapy.Field()date scrapy.Field()2.导包from game.items import GameItem。注意若scrapy项目不时最开始的根目录导包时会报错可以在项目的根目录game点击右键选择Mark Directory as --》选择root xiao_gameGameItem()xiao_game[name]namexiao_game[url] urlxiao_game[src] srcxiao_game[category] categoryxiao_game[date] dateyield xiao_game别用傻方法dic{name:name,url:url,src:src,category:category,date:date}#需要用yield将数据传递给管道#yield dic 如果返回的是数据直接可以认为是给了管道Pipeline。实际是先给引擎引擎再给管道Pipeline。这样能提高性能主要体现在内存上yield dic#yield是生成器。如果用list临时保存会占用内存空间生成器函数节省内存 用xpath和css混合解析
import scrapy
from game.items import GameItemclass XiaoSpider(scrapy.Spider):#scrapy.Spider是继承scrapy中的spiders模块不要去修改name xiao#爬虫名字allowed_domains [4399.com]#被允许的域名#start_urls [https://4399.com]#起始页面url这里可以修改我们想爬的是https://www.4399.com/flash/所以要修改start_urls [https://www.4399.com/flash/]def parse(self, response, **kwargs):#分块提取循环li_list response.xpath(//ul[classn-game cf]/li)for li in li_list:nameli.xpath(./a/b/text()).extract_first()#extract_first()提取一项内容如果没有返回NONEurl https://www.4399.com li.xpath(./a/href).extract_first() # extract_first()提取一项内容如果没有返回NONEsrchttps:li.xpath(./a/img/lz_src).extract_first()category li.xpath(./em/a/text()).extract_first()date li.xpath(./em/text()).extract_first()name li.css(b::text).extract_first()url https://www.4399.com li.css(a::attr(href)).extract_first()src https: li.css(a img::attr(lz_src)).extract_first()category li.css(em a::text).extract_first()date li.css(em::text).extract_first()xiao_game GameItem()xiao_game[name] namexiao_game[url] urlxiao_game[src] srcxiao_game[category] categoryxiao_game[date] dateyield xiao_game 在Pipeline中完成数据的存储工作
# Define your item pipelines here
#
# Dont forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapter注意管道默认是不开启的需要去settings.py中开启如
ITEM_PIPELINES {game.pipelines.GamePipeline: 300,
}class GamePipeline:#这个是默认创建的可以修改如下文17行NewPipelinedef process_item(self, item, spider):#这个是定死的不能修改.这个里面就可以保存数据。#item是数据#spider是爬虫如xiao.py中name xiaoprint(item)print(spider.name)#这里可以开始存储数据了return itemclass NewPipeline:def process_item(self, item, spider):若要在item中在加一个字段不能想dict一样直接赋值必须要现在items.py中定义key如love scrapy.Field()。item[love]我喜欢吃冰淇淋return item 设置settings.py文件将Pipeline进行生效设置 key是管道的路径
value是优先级优先级数越小越高越先执行
ITEM_PIPELINES {game.pipelines.GamePipeline: 300,#game.pipelines.NewPipeline: 299,
} 运行项目 scrapy 命令scrapy crawl 爬虫名 scrapy crawl xiao运行后会打印出日志。 如果不想看日志打开settings.py添加LOG_LEVEL“WARNING”#设置成WARNING是指只打印WARNING及以上级别的日志。 #日志级别DEBUGINFOWARNINGERRORCRITICAL等级从低到高 ———————————————— 原文链接https://blog.csdn.net/qq_35249586/article/details/131023114 还没看够可以关注呦~下面有免费的靶场视频面试技巧等等
V【zkaq222】或者下面的扫码不然通不过哦免费领取安全学习资料包私聊进群一起学习共同进步腾讯文档-在线文档https://docs.qq.com/doc/DYmVETWlZemh0Ymdv