首页 > 编程知识 正文

django调用scrapy爬虫(scrapy 全网爬虫)

时间:2023-05-06 14:39:38 阅读:103390 作者:3964

Scrapy

架构图

Scrapy Engine :负责Spider、ItemPipeline、下载器和调度器之间的通信、信号和数据传输。Scheduler (:)它负责接收引擎发送的Request请求,按照一定的方式进行排列,排队,在引擎需要时返回给引擎。下载器(Downloader):负责下载Scrapy Engine(引擎)发送的所有请求,并将获得的响应返回给Scrapy Engine(引擎),由引擎移交给Spider处理;Spider (crawler):负责处理所有的Responses,分析并从中提取数据,获取Item字段需要的数据,将需要遵循的URL提交给引擎,然后进入Scheduler (scheduler)和Item Pipeline (pipeline):负责处理从Spider获得的Item并进行后处理(详细分析、过滤、存储等)的地方。).下载器中间件(Downloader Middlewares):你可以把它想象成一个可以定制和扩展下载功能的组件。蜘蛛中间件(Spider Middleware):你可以把它理解为一个功能组件,可以定制引擎和蜘蛛之间通信的扩展和操作(比如进入蜘蛛的Responses和天基信息平台的请求

00-1010创建项目:scrapy startproject项目名称创建Crawler:输入项目所在的路径,执行命令:scrapy gens pider Crawler Name Crawler域名。注意:爬虫的名称和项目的名称不能一致。

创建项目和爬虫:

items . py : middleware . py:存储爬虫抓取的数据的模型:存储各种中间件的文件。Pipelines.py:用于将项目模型存储到本地磁盘。Settings.py:爬虫的一些配置信息(如请求头、发送请求的频率、ip代理池等。)scrapy.cfg:项目的配置文件。蜘蛛包:以后所有爬行动物都要存放在这里。

项目目录结构

response是一个scrapy . http . response . html . html response对象,它可以执行xpath和css语法来提取数据。提取的数据是选择器或选择列表对象。其中get字符串应该执行getall或get方法。获取方法:获取选择器中的所有文本并返回一个列表。获取方法:获取选择器中的第一个文本,并返回一个字符串类型。如果数据被解析回来,您可以使用yield将其返回到管道进行处理。或者收集所有物品,最后用return返回。Item:建议在items.py中定义模型,这样以后就不用字典了。Pipeline:这是专门用来保存数据的,其中经常用到三种方法:open_spider(self,spider): process _ item (self,item,spider) 3360在爬虫打开时执行,当爬虫发送一个项目时会调用。爬虫关闭时会调用Closs_spider(self,spider):要激活pipeline,应该在settings中设置ITEM _ PIPELINES . py保存json数据时,可以使用JSONLINE sitemaxporterjsonetm Exporter:每次将数据添加到内存中,都可以统一写入磁盘。优点是存储的数据符合json规则。缺点是数据量大,会消耗更多内存。

from scrapy . exporters import jsontimexporterclass QsbkPipeline(对象): def _ _ init _ _(self): self . FP=open(' duanzi . JSON ',' WB ')self . exporter=jsontimexporter(self . FP,确保_ascii=False,编码=' utf-8 ')self . exporter . start _ export()def open _ spider(self,spider): pass def process _ item(self,item,spider)3: self

tem def close_spider(self, spider): self.exporter.finish_exporting() self.fp.close()

JsonLinesItemExporter:每次调用exorter_item的时候就把item存储到磁盘中。坏处是每一个字典是一行,整个文件不是一个满足json格式的文件。好处是每次处理数据的时候就直接存储到磁盘中,不会耗内存,数据也比较安全。

from scrapy.exporters import JsonLinesItemExporterclass QsbkPipeline(object): def __init__(self): self.fp = open('duanzi.json', 'wb') self.exporter = JsonLinesItemExporter(self.fp, ensure_ascii=False, encoding='utf-8') def open_spider(self, spider): pass def process_item(self, item, spider): self.exporter.export_item(item) return item def close_spider(self, spider): self.fp.close()

CrawlSpider

在创建爬虫的命令修改为scrapy genspider -t crawl 爬虫名字 爬虫域名

需要使用LinkExtractor和Rule,这两个东西决定爬虫的具体走向。

allow设置规则的方法,要能够限制在我们想要的url上,不要跟其他的url产生相同的正则表达式即可。什么情况下使用follow:如果在爬取页面的 时候,需要将满足当前条件的url再进行跟进,那么就设置为True,否则设置为False.什么情况下指定callback:如果这个url对应的页面,只是为了获取更多的url, 并不需要里面的数据,那么可以不指定callback;如果想要获取url对应页面的数据,那么就需要指定一个callback。

Scrapy Shell

可以方便我们做一些数据提取的测试代码如果想要执行scrapy命令,毫无疑问是要先进入到scrapy所在的环境中如果想要读取某个项目的配置信息,那么应该先进入到这个项目中,再执行scrapy shell命令

模拟登陆人人网

想要发送post请求,推荐使用scrapy.FormRequest方法,可以方便的指定表单数据。如果想在爬虫一开始的时候就发送post请求,那么应该重写start_requests方法,在这个方法中发送post请求

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。