spiderfoot安装,spiderfoot会被对手反扫描

  spiderfoot安装,spiderfoot会被对手反扫描

  一、Scrapy框架1.Scrapy框架的主要组件

  A.Scrapy有三个对象:请求请求对象、响应响应对象和项目数据对象(字典)

  B.Scrapy的五个核心组件:

  蜘蛛爬虫组件,构建爬虫的初始请求并交给调度器,分析响应提取数据并交给管道存储。

  引擎组件,调用每个组件执行功能,并接收返回值和传递参数。

  调度程序调度程序,调度程序请求重复数据删除,临时存储请求,并将请求发送给下载器。

  Downloader下载并发送请求,并将响应返回给crawler进行分析。

  管道管道,保存数据

  C.Scrapy两个可选中间件:

  DownloaderMiddlewaresSpider下载中间件,处理反爬行相关操作。

  SpiderMiddlewaresSpider中间件,在请求被交给调度程序之前的特殊处理。

  D.Scrapy框架流程:爬虫组件-引擎组件-调度器-引擎组件-下载器-引擎组件-爬虫组件

  如果下载器返回请求:-引擎组件-调度器-引擎组件-下载器-引擎组件-爬虫组件

  如果下载器返回项目对象:-引擎组件-管道

  补充:

  蜘蛛爬虫组件构建初始请求的url,并通过xpath分析提取响应对象的数据。

  调度程序调度程序,蜘蛛将在所有请求完成时终止。

  组件之间有数据交互,可以使用中间件进行外部扩展。

  2.拟人化过程

  1:发动机:嗨!蜘蛛,老板要对付哪个站?给我第一批要处理的URL请求。

  2蜘蛛:给你,第一个网址‘http://www . Baidu . com/’

  3.发动机:嗨!调度员,我有个请求。请帮我再次离队。

  4调度:正在处理。等着瞧.好了,处理好了。

  发动机5:嗨!调度员,给我你的重置请求。

  调度:给你,这是我的重置请求。

  7.发动机:嗨!下载者,请根据下载中间件的设置帮我下载这个请求请求。

  8下载者:稍等.好的,给你。这是下载的响应。

  (如果失败:对不起,此请求下载失败。然后引擎告诉调度器:这个请求下载失败,你把它放在请求队列里,我稍后再打电话给你重新下载。)

  9:发动机:嗨!蜘蛛,这是下载的响应,已经按照下载中间件处理过了。请处理它。

  1Spider: Engine,我这里有两个处理结果。这是我需要跟进的URL请求,这是我得到的项目数据。

  11发动机:嗨!我有一个项目数据在管道中。请为我保存它。调度员,这是需要跟进的网址。请帮助我处理它,然后从我们的第五步开始循环,直到获得所有需要的信息。

  12流水线调度器:好,现在就做!

  注意:只有当调度程序没有请求要处理时,整个程序才会停止。(Scrapy还会重新下载失败的下载请求。一共三次。)

  框架默认的请求重试时间是180s,可以改变设置文件的DOWNLOAD_TIMEOUT变量的值。

  3.请求模块碎片框架比较

  请求模块的响应

  导入请求

  response=reqeusts.get()

  Response.text #返回Unicode字符串

  Response.content #网页的原始编码字符串,也可以处理图像音频和视频。

  Scrapy框架的响应

  Response.text # Unicode字符串

  Response.body #网页原编码字符串,也可以处理图片音频和视频

  请求模块的xpath方法返回匹配的Unicode字符串。

  #返回所有xpath匹配对象的列表

  rsponse.xpath(//title/text())

  Scrapy框架的xpath方法返回匹配对象的列表,Unicode字符串。

  #取多值:返回所有匹配结果的字符串列表(如果匹配成功,按下标获取数据;如果匹配失败,则返回一个空列表,下标获取数据并抛出异常)

  rsponse.xpath(//title/text())。提取()

  [, , ]

  # Take single value:返回匹配的第一个字符串(如果匹配成功,则返回该字符串,如果匹配失败,则不返回)

  rsponse.xpath(//title/text())。extract_first()

  Scrapy框架支持大量请求和高并发。

  Scrapy框架:发送请求,解析响应,并发处理,数据存储,请求去重(fingerprint -url,method,body=sha1 string),scrapy_redis支持分布式采集。

  4.Scrapy使用的标准流程:

  1个新项目

  scrapy startproject百度

  2输入项目代码并创建一个新的条目字段(编写items.py文件)

  3个新履带车

  斗志昂扬的百度Baidu.com

  4编写爬虫代码(baidu.py),提取数据:url/item(如果是url,则继续发送构造请求,如果是item,则保存在管道中)

  5编写pipeline.py文件。

  6更改settings.py的配置信息(并发、用户代理、启用管道)

  7执行爬虫:

  #查看当前项目下的所有crawler名称

  剪贴簿

  #在当前项目下运行指定的crawler(根据crawler名称)

  刺儿头爬百度

  #在当前项目下运行指定的爬虫(根据爬虫文件名)

  #scrapy runspider baidu.py

  传统开发:半年到一年,等所有功能都开发好了再上线。

  敏捷开发:快速迭代更新,先实现部分功能,然后上线,后期不断更新迭代。

  5.Scrapy命令行:

  Scrapy bench:程序启动前的组件加载信息,爬虫运行时的收集信息,爬虫结束后的统计信息。

  Scrapy startproject:新建一个项目,外层是项目目录,内层有一个同名的代码目录。

  创造一个新的爬虫。一个项目可以有多个爬网程序。scrapy genspider爬虫名称是爬虫的域名。爬网程序名称不能与爬网程序名称相同。

  Scrapy runspider:在创建项目的地方运行爬虫。scrapy runspider爬虫文件名

  Scrapy shell:在交互模式下运行爬虫

  零碎视图:在浏览器中打开项目

  剪贴簿列表:检查爬虫名称。

  Scrapy crawl爬虫名称-o存储文件名:命令行保存数据。

  保存文件格式:json(带括号)、jl(不带括号,按行存储)、xml、csv。如果需要存储在数据库中,则需要写入管道文件,并在设置文件中启用管道。

  管道文件:

  爬虫启动时,调用一次open_spider方法。

  在运行时,crawler每次传递一个项目时都会调用process_item方法。

  当爬虫关闭时,调用一次close_spider方法。

  6.setting.py文件:

  BOT_NAME:项目名称

  robot stxt _ observe:无论是否遵循机器人协议,默认为真。

  CONCURRENT_REQUESTS:最大请求并发数(主要用于指定下载器)

  DOWNLOAD_DELAY:下载延迟,每批请求的等待时间。

  CONCURRENT_REQUESTS_PER_DOMAIN:根据特定的域名定义并发性。

  CONCURRENT_REQUESTS_PER_IP:根据特定IP定义并发性

  COOKIES_ENDBLED:是否启用cookie,默认开启。

  默认请求头:默认请求头

  * *中间件都遵循:值越小优先级越高,取值范围为0-1000**

  SPIDER _ MIDDLEWARES:爬虫中间件,值越小优先级越高。

  下载器_中间件:下载中间件

  项目_管道:管道中间件

  需要在设置文件中添加自定义中间件:项目名、模块名、中间件类名。

  7.python补充知识点

  锚点:记录用户来自哪里,url路径上的#号

  生成器中的屈服函数:

  通过yield返回数据以记录方法的状态。

  通过yield返回不同类型的数据。

  减少内存使用

  Python异常道:

  代码错误

  手动引发异常,引发NameError(xxxx )

  引发断言异常,断言布尔值

  控制url查询字符串页码参数的自增量,json文件

  选择“链接到下一个按钮”,HTML文件

  有了固定的url地址,所有需要请求的url都可以保存在start_url中,并发性高。

  2 Python不需要导入同级目录下的模块。python3导入同级目录中的模块。

  实现Python2 python3兼容性的方法:

  尝试:

  从队列以相同名称导入队列

  除了:

  从队列以相同名称导入队列

  从six.moves.queue导入队列

  Python有从小到大的组件:函数-类-模块-包-类库-框架。

  元字典作为响应的属性传递给下一个回调函数。

  进程、线程、协程:

  Io密集型(读写网络、磁盘、数据库等。):使用多线程,因为当IO被阻塞时,解释器会自动释放GIL,试图让其他线程工作。

  互斥锁:一种允许多个线程安全有序地访问内存空间的机制。

  GIL:从根本上消除了多线程访问内存空间的隐患。

  CPU密集型(并行计算):使用多进程,因为不需要切换任务,所以可以充分利用CPU的计算性能。

  Co-monkey补丁(处理网络IO密集型任务):monkey补丁可以让Python的底层网络库在处理网络任务时异步执行。

  并行、并发、同步、异步、阻塞、非阻塞、多线程、多进程、协同、GIL

  如果方法中没有返回值,则不返回任何值。

  多进程:并行适用于CPU密集型计算(并行计算)

  多线程:并发,适合io密集型(网络、数据库、磁盘、文件)

  Co-monkey补丁:应对密集的网络io,将python底层的网络库改为异步和非阻塞,同步和异步是执行方式,阻塞和非阻塞是执行状态。

  互斥锁:一种允许多个线程安全有序地访问内存空间的机制。

  GIL:从根本上消除多线程访问内存空间的隐患。

  8.收集多页/多级数据

  多页数据采集:

  1.自增量控制页码:适用于处理json文件响应的提取。没有下一页,总页数不确定,但你可以随时通过自增量控制翻页,判断响应中是否有数据来决定是否继续收集。

  2.通过“下一页”连接处理多页采集:适用于html文件的采集,依赖于网页的A标签提取,可以动态获取所有页面数据,在最后一页完成提取。

  3.将所有url地址保存在start_urls中(可以通过列表、读取磁盘文件、数据库等方式推导出来。).前提条件必须提供要发送的所有url地址。

  多级页面数据采集:

  1.不同页面的数据存储在不同的项目对象中。

  2.不同页面的数据存储在同一个item对象中。

  转载于:https://www.cnblogs.com/hsmwlyl/p/10636571.html

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: