scrapy

Use scrapy to get list of urls, and then scrape content inside those urls

一世执手 提交于 2020-01-21 02:12:17
问题 I need a Scrapy spider to scrape the following page (https://www.phidgets.com/?tier=1&catid=64&pcid=57) for each URL (30 products, so 30 urls) and then go into each product via that url and scrape the data inside. I have the second part working exactly as I want: import scrapy class ProductsSpider(scrapy.Spider): name = "products" start_urls = [ 'https://www.phidgets.com/?tier=1&catid=64&pcid=57', ] def parse(self, response): for info in response.css('div.ph-product-container'): yield {

Python爬虫【五】Scrapy分布式原理笔记

旧巷老猫 提交于 2020-01-20 06:50:55
Scrapy单机架构 在这里scrapy的核心是scrapy引擎,它通过里面的一个调度器来调度一个request的队列,将request发给downloader,然后来执行request请求 但是这些request队列都是维持在本机上的,因此如果要多台主机协同爬取,需要一个request共享的机制——requests队列,在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享爬取队列。 单主机爬虫架构 调度器负责从队列中调度requests进行爬取,而每台主机分别维护requests队列 分布式爬虫架构 队列用什么维护? 这里一般我们通过Redis为维护,Redis,非关系型数据库,Key-Value形式存储,结构灵活。 是内存中的数据结构存储系统,处理速度快,性能好。提供队列、集合等多种存储结构,方便队列维护。 如何去重?—— Redis集合 redis提供集合数据结构,在redis集合中存储每个request的指纹。 在向request队列中加入Request前先验证这个Request的指纹是否已经加入集合中。 如果已经存在则不添加到request队列中,如果不存在,则将request加入到队列并将指纹加入集合。 如何防止中断?——启动判断 在每台slave的Scrapy启动的时候都会判断当前redis request队列是否为空

scrapy工作流程

假如想象 提交于 2020-01-19 19:53:51
一: scrapy 工作原理介绍:   千言万语,不如一张图来的清晰: 解释说明: 1、从优先级队列中获取request对象,交给engine 2、engine将request对象交给下载器下载,期间会通过downloadmiddleware的process_request方法 3、下载器完成下载,获得response对象,将该对象交给engine,期间会经过downloadmiddleware的process_response( )方法 4、engine将获得的response对象交给spider进行解析,期间会经过spidermiddleware的process_spider_input()的方法 5、spider解析下载器下下来的response,返回item或是links(url) 6、item或者link经过spidermiddleware的process_spider_out( )方法,交给engine 7、engine将item交给item pipeline ,将links交给调度器 8、在调度器中,先将requests对象利用scrapy内置的指纹函数生成一个指纹4 9、如果requests对象中的don't filter参数设置为False,并且该requests对象的指纹不在信息指纹的队列中,那么就把该request对象放到优先级队列中 循环以上操作 中间件:

scrapy工作流程

佐手、 提交于 2020-01-19 19:07:19
Scrapy主要有以下几个组件: 1,引擎(Scrapy) 用来处理整个系统的数据流,触发事务(框架核心) 2,调度器(Scheduler) 用来接收引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回,可以想象成一个url(抓取网页的网址或者说是链接)的优先队列,由它决定下一个要抓取的网址是什么,同时去除重复的网址 3,下载器(Downloader) 用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器是建立再twisted)这个高效的异步模型上的 4,爬虫(Spiders) 爬虫是主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item).用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 5,项目管道(Pipeline) 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体,验证实体的有效性,清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 6,下载器中间件(Downloader Middlewares) 位于Scrapy引擎和下载器之间的框架,主要是处理Scarpy引擎和下载器之间的请求及响应 7,爬虫中间件(Spider Middlewares) 介于scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出 8,调度中间件(Scheduler Middewares)

python——scrapy-redis分布式组件

萝らか妹 提交于 2020-01-19 19:05:17
爬虫的自我修养_7 一、scrapy-redis架构 scrapy-redis在scrapy的架构上增加了redis,基于redis的特性拓展了如下组件: Scheduler : Scrapy改造了python本来的collection.deque(双向队列)形成了自己的Scrapy queue( https://github.com/scrapy/queuelib/blob/master/queuelib/queue.py) ),但是Scrapy多个spider不能共享待爬取队列Scrapy queue, 即Scrapy本身不支持爬虫分布式,scrapy-redis 的解决是把这个Scrapy queue换成redis数据库(也是指redis队列),从同一个redis-server存放要爬取的request,便能让多个spider去同一个数据库里读取。 Scrapy中跟“待爬队列”直接相关的就是调度器 Scheduler ,它负责对新的request进行入列操作(加入Scrapy queue),取出下一个要爬取的request(从Scrapy queue中取出)等操作。它把待爬队列按照优先级建立了一个字典结构,比如: { 优先级0 : 队列0 优先级1 : 队列1 优先级2 : 队列2 } 然后根据request中的优先级,来决定该入哪个队列,出列时则按优先级较小的优先出列

【scrapy】【四】scrapy项目

依然范特西╮ 提交于 2020-01-19 12:07:39
scrapy shell是用来调试的,要写爬虫需要建一个项目 1、建立项目 先启动虚拟机:vagrant up 如果有启动不了的情况,直接打开virtualbox启动就行,然后回到windows的cmd下登录:vagrant ssh 或者直接在virtualbox里操作虚拟机【virtualbox里登录是需要密码的,俩都是vagrant】。 然后建立一个名字是projecties的项目,发现是python2.7的。 $ scrapy startproject projecties 显示结果: New Scrapy project 'properties', using template directory '/usr/local/lib/python2.7/dist-packages/scrapy/templates/project', created in: /home/vagrant/properties You can start your first spider with: cd properties scrapy genspider example example.com 然后我就在virtualbox里删掉了上面那个项目:rm -rf projecties 在conda里新建了一个python3的环境,激活环境后重新开始创建项目,结果如下

scrapy 运行多爬虫

自作多情 提交于 2020-01-19 05:20:13
背景:scrapy是支持多爬虫启动的,有两种方式. 你可以使用scrapy.crawler.CrawlerProcess这个类来运行你的spider,这个类会为你启动一个Twisted reactor,并能配置你的日志和shutdown处理器。所有的scrapy命令都使用这个类. 另外一个功能更强大的类是scrapy.crawler.CrawlerRunner,我用的就是这个,目前同时启动过7个爬虫,如果有文件读写操作,记得开启ulimit -n 2048. 多爬虫启动就是指同一进程启动多个爬虫. import scrapy from twisted . internet import reactor from scrapy . crawler import CrawlerRunner from scrapy . utils . log import configure_logging class MySpider1 ( scrapy . Spider ) : # Your first spider definition . . . class MySpider2 ( scrapy . Spider ) : # Your second spider definition . . . configure_logging ( ) runner = CrawlerRunner ( )

scrapy + mogoDB 网站爬虫

半世苍凉 提交于 2020-01-18 22:36:51
工具环境 语言:python3.6 数据库:MongoDB (安装及运行命令如下) 1 python3 -m pip install pymongo 2 brew install mongodb 3 mongod --config /usr/local/etc/mongod.conf 框架:scrapy1.5.1 (安装命令如下) 1 python3 -m pip install Scrapy 用 scrapy 框架创建一个爬虫项目 在终端执行如下命令,创建一个名为 myspider 的爬虫项目 1 scrapy startproject myspider 即可得到一个如下结构的文件目录 创建 crawl 样式的爬虫 针对不同的用途, scrapy 提供了不同种类的爬虫类型,分别是 Spider:所有爬虫的祖宗 CrawlSpider:比较常用的爬取整站数据的爬虫(下面的例子就是用这种) XMLFeedSpider CSVFeedSpider SitemapSpider 先在命令行进入到 spiders 目录下 1 cd myspider/myspider/spiders 然后创建 crawl 类型的爬虫模板 1 scrapy genspider -t crawl zgmlxc www.zgmlxc.com.cn 参数说明: -t crawl 指明爬虫的类型 zgmlxc

Scrapy原理讲解

跟風遠走 提交于 2020-01-18 16:24:26
一.scrapy爬虫流程 scheduler拿到从spiders里面拿到需要爬取的URL并通过Scrapy Engine将其交给下载中间件处理交给Downloader下载。 Downloader通过下载中间件将数据交给引擎,引擎通过爬虫中间件,将数据交给爬虫。 爬虫提取数据交给引擎,引擎通过Pipeline进行数据的存储。 spider通过提取的url地址构造request对象通过爬虫中间交给引擎交给调度器 二 .scrapy项目 来源: CSDN 作者: 猎剑 链接: https://blog.csdn.net/weixin_42393089/article/details/104030636

scrapy模块

淺唱寂寞╮ 提交于 2020-01-18 11:33:53
python其他知识目录 python基础知识-1 1、typora软件使用 2、python解释器安装 3、Python解释器环境变量添加 4、计算机编码知识: 5、输出print(): 6、变量 7、输入input(): 8、注释 python基础知识-2 1、循环打印“我是小马过河” #4、用while从一打印到10 #5、请通过循环,1 2 3 4 5 6 8 9 10 #6、while else 结构 #7、格式化输出 #8、打印1-100的奇数 #9、求和1-100 #10、计算1-10中,除1外,偶数减奇数 #11、求方, #12、求开方 #13、逻辑运算 与或非 #14、数据类型转换 #15、value=1 or 9 (and,or,not) or and python基础知识-3 1、for循环遍历字符串中单个字符 2、#计算字符串长度 3、#字符串索引 4、#让用户输入任意字符串,获取字符串之后并计算其中有多少个数字isdigit() 5、#索引取值,从前向后,从后向前取。 6、#切片和索引 7、#字符串操作split,#有时间添加awk的切割做对比 8、#字符串操作isdigit使用 9、#字符串操作upper和lower 10、#字符串操作strip(),lstrip(),rstrip() Python基础知识-4 1、字符串操作 1