大数据-爬虫框架学习--scrapy
Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。 Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类, 如BaseSpider、sitemap爬虫等,还有对web2.0爬虫的支持。Scrach是抓取的意思。
二、安装scrapy
下列的安装步骤假定您已经安装好下列程序(操作系统最好选择linux,很多python组件在linux环境下开发对windows的支持不是非常理想,而且在linux下运行python效率非常高,python的版本主要有2.x与3.x,3.x这个版本与2.x有很多地方不一样,大部分的组件只支持2.x,不建议安装3.x):
- Python 2.7
- Python Package: pip and setuptools. 现在 pip 依赖 setuptools ,如果未安装,则会自动安装 setuptools 。
- lxml. 大多数Linux发行版自带了lxml。如果缺失,请查看http://lxml.de/installation.html
- OpenSSL. 除了Windows(请查看 平台安装指南)之外的系统都已经提供。
Linux cxgzs.wl02 3.10.0-514.2.2.el7.x86_64 #1 SMP Tue Dec 6 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Collecting scrapy
Downloading Scrapy-1.3.3-py2.py3-none-any.whl (240kB)
100% |████████████████████████████████| 245kB 66kB/s
Collecting pyOpenSSL (from scrapy)
Downloading pyOpenSSL-16.2.0-py2.py3-none-any.whl (43kB)
100% |████████████████████████████████| 51kB 75kB/s
Installing collected packages: asn1crypto, packaging, cryptography, pyOpenSSL, cssselect, w3lib, parsel, queuelib, attrs, pyasn1-modules, service-identity, zope.interface, constantly, incremental, Automat, Twisted, PyDispatcher, scrapy
Successfully installed Automat-0.5.0 PyDispatcher-2.0.5 Twisted-17.1.0 asn1crypto-0.22.0 attrs-16.3.0 constantly-15.1.0 cryptography-1.8.1 cssselect-1.0.1 incremental-16.10.1 packaging-16.8 parsel-1.1.0 pyOpenSSL-16.2.0 pyasn1-modules-0.0.8 queuelib-1.4.2 scrapy-1.3.3 service-identity-16.0.0 w3lib-1.17.0 zope.interface-4.3.3
Scrapy 1.3.3
三、scrapy框架工作流程介绍
- 新建项目 (Project):新建一个新的爬虫项目
scrapy startproject myproject
其中,myproject为项目名称。
可以看到将会创建一个 myproject文件夹,目录结构如下:
myproject/ scrapy.cfg myproject/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
下面来简单介绍一下各个文件的作用:
- scrapy.cfg:项目的配置文件
- myproject/:项目的 Python 模块,将会从这里引用代码
- myproject/items.py:项目的 items 文件
- myproject/pipelines.py:项目的 pipelines 文件
- myproject/settings.py:项目的设置文件
- myproject/spiders/:存储爬虫的目录
- 明确目标(Items):明确你想要抓取的目标
- 制作爬虫(Spider):制作爬虫开始爬取网页
确定三个强制的属性:
- name:爬虫的识别名称,必须是唯一的,在不同的爬虫中你必须定义不同的名字。
- start_urls:爬取的 URL 列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些 urls 开始。其他子 URL 将会从这些起始 URL 中继承性生成。
- parse():解析的方法,调用的时候传入从每一个 URL 传回的 Response 对象作为唯一参数,负责解析并匹配抓取的数据(解析为 item),跟踪更多的 URL。
- 把 Url 存储下来并依此为起点逐步扩散开去,抓取所有符合条件的网页 Url 存储起来继续爬取。
- 存储内容(Pipeline):设计管道存储爬取内容
- 爬虫爬下来的内容可以存储为csv、json、xml或者直接导入到数据库中。
class CsdnSpider(scrapy.Spider):
name = 'csdn'
start_urls = ['http://blog.csdn.net/firehadoop?viewmode=contents']
def parse(self, response):
for href in response.css('h1 .link_title a::attr(href)'):
full_url = response.urljoin(href.extract())
print full_url
yield scrapy.Request(full_url, callback=self.parse_question)
def parse_question(self, response):
yield {
'title': response.css('.link_title a::text').extract(),
'postdate':response.css('.link_postdate ::text').extract(),
'view':response.css('.link_view ::text').extract(),
'link': response.url,
}
2017-04-17 20:50:52 [scrapy.utils.log] INFO: Scrapy 1.3.3 started (bot: scrapybot)
2017-04-17 20:50:52 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True, 'FEED_URI': 'csdn5.txt'}--爬虫输出文件是csdn5.txt,并且是覆盖追加模式
2017-04-17 20:50:53 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.feedexport.FeedExporter',
'scrapy.extensions.logstats.LogStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.corestats.CoreStats']
2017-04-17 20:50:53 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-04-17 20:50:53 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2017-04-17 20:50:53 [scrapy.middleware] INFO: Enabled item pipelines:
[]--文件中没有定义pipelines进行转储,直接通过scrapy命令加output参数实现转储
2017-04-17 20:50:53 [scrapy.core.engine] INFO: Spider opened
2017-04-17 20:50:53 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-04-17 20:50:53 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200)<GET http://blog.csdn.net/firehadoop?viewmode=contents> (referer: None)--爬虫启动的入口url,firehadoop博客的目录视图入口
http://blog.csdn.net/firehadoop/article/details/70182483--对应firehadoop上的七篇博客完整的url链接
http://blog.csdn.net/firehadoop/article/details/70162692
http://blog.csdn.net/firehadoop/article/details/69853954
http://blog.csdn.net/firehadoop/article/details/69791546
http://blog.csdn.net/firehadoop/article/details/69075792
http://blog.csdn.net/firehadoop/article/details/68981887
http://blog.csdn.net/firehadoop/article/details/68953541
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/70162692> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/68953541> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/69791546> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/69075792> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/70182483> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/68981887> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/70162692>
{'postdate': [u'2017-04-13 22:13'], 'view': [u'15\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/70162692', 'title': [u'\r\n win10\u4e0b\u5b89\u88c5\u914d\u7f6ecisco vpn client \r\n ']}--返回解析好json格式的爬取信息
2017-04-17 20:50:53 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://blog.csdn.net/firehadoop/article/details/69853954> (referer: http://blog.csdn.net/firehadoop?viewmode=contents)
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/68953541>
{'postdate': [u'2017-04-02 19:22'], 'view': [u'42\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/68953541', 'title': [u'\r\n centos7\u4e0b\u8c03\u8bd5\u96c6\u7fa4\u4e09\u53f0\u673a\u5668\u5b9e\u73b0\u514d\u5bc6\u767b\u9646--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e00 \r\n ']}
{'postdate': [u'2017-04-09 07:15'], 'view': [u'66\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/69791546', 'title': [u'\r\n \u673a\u5668\u5b66\u4e60\u5165\u95e8\u7cfb\u5217-\u4e3a\u4ec0\u4e48\u8981\u673a\u5668\u5b66\u4e60 \r\n ']}
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/69075792>
{'postdate': [u'2017-04-04 16:19'], 'view': [u'22\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/69075792', 'title': [u'\r\n hadoop\u7684dw-hive\u5b89\u88c5\u914d\u7f6e---hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e09 \r\n ']}
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/70182483>
{'postdate': [u'2017-04-15 09:11'], 'view': [u'30\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/70182483', 'title': [u'\r\n sqoop \u77e5\u8bc6\u53ca\u5b89\u88c5\u914d\u7f6e\u8bf4\u660e--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u56db \r\n ']}
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/68981887>
{'postdate': [u'2017-04-03 19:31'], 'view': [u'64\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/68981887', 'title': [u'\r\n centos7\u5168\u5206\u5e03\u6a21\u5f0f\u5b89\u88c5hadoop--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e8c \r\n ']}
2017-04-17 20:50:53 [scrapy.core.scraper] DEBUG: Scraped from <200 http://blog.csdn.net/firehadoop/article/details/69853954>
{'postdate': [u'2017-04-09 17:33'], 'view': [u'18\u4eba\u9605\u8bfb'], 'link': 'http://blog.csdn.net/firehadoop/article/details/69853954', 'title': [u'\r\n \u673a\u5668\u5b66\u4e60\u5165\u95e8\u7cfb\u5217\u4e4b\u4e8c---\u7ebf\u6027\u56de\u5f52\u7b97\u6cd5\u5b66\u4e60 \r\n ']}
2017-04-17 20:50:53 [scrapy.core.engine] INFO: Closing spider (finished)--爬虫完工了
2017-04-17 20:50:53 [scrapy.extensions.feedexport] INFO:Stored jsonlines feed (7 items) in: csdn5.txt--结果以jsonlines格式存储在csdn5.txt中,jsonlines就是每行数据一个json,如果才用json格式,会用数组嵌套的模式把这7行数据放置在一个json中。
2017-04-17 20:50:53 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 2871,
'downloader/request_count': 8,
'downloader/request_method_count/GET': 8,
'downloader/response_bytes': 133247,
'downloader/response_count': 8,
'downloader/response_status_count/200': 8,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 4, 17, 12, 50, 53, 791299),
'item_scraped_count': 7,
'log_count/DEBUG': 16,
'log_count/INFO': 8,
'request_depth_max': 1,
'response_received_count': 8,
'scheduler/dequeued': 8,
'scheduler/dequeued/memory': 8,
'scheduler/enqueued': 8,
'scheduler/enqueued/memory': 8,
'start_time': datetime.datetime(2017, 4, 17, 12, 50, 53, 62819)}
2017-04-17 20:50:53 [scrapy.core.engine] INFO: Spider closed (finished)
{"postdate": ["2017-04-13 22:13"], "title": ["\r\n win10\u4e0b\u5b89\u88c5\u914d\u7f6ecisco vpn client \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/70162692", "view": ["15\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-02 19:22"], "title": ["\r\n centos7\u4e0b\u8c03\u8bd5\u96c6\u7fa4\u4e09\u53f0\u673a\u5668\u5b9e\u73b0\u514d\u5bc6\u767b\u9646--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e00 \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/68953541", "view": ["42\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-09 07:15"], "title": ["\r\n \u673a\u5668\u5b66\u4e60\u5165\u95e8\u7cfb\u5217-\u4e3a\u4ec0\u4e48\u8981\u673a\u5668\u5b66\u4e60 \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/69791546", "view": ["66\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-04 16:19"], "title": ["\r\n hadoop\u7684dw-hive\u5b89\u88c5\u914d\u7f6e---hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e09 \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/69075792", "view": ["22\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-15 09:11"], "title": ["\r\n sqoop \u77e5\u8bc6\u53ca\u5b89\u88c5\u914d\u7f6e\u8bf4\u660e--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u56db \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/70182483", "view": ["30\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-03 19:31"], "title": ["\r\n centos7\u5168\u5206\u5e03\u6a21\u5f0f\u5b89\u88c5hadoop--hadoop\u5b89\u88c5\u7cfb\u5217\u4e4b\u4e8c \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/68981887", "view": ["64\u4eba\u9605\u8bfb"]}
{"postdate": ["2017-04-09 17:33"], "title": ["\r\n \u673a\u5668\u5b66\u4e60\u5165\u95e8\u7cfb\u5217\u4e4b\u4e8c---\u7ebf\u6027\u56de\u5f52\u7b97\u6cd5\u5b66\u4e60 \r\n "], "link": "http://blog.csdn.net/firehadoop/article/details/69853954", "view": ["18\u4eba\u9605\u8bfb"]}
大数据-爬虫框架学习--scrapy相关推荐
- 视频教程-大数据Java强化班(十)之大数据爬虫-Java
大数据Java强化班(十)之大数据爬虫 10年一线开发及项目管理经验,6年以上大数据项目架构.实施.开发与运维经验,骨灰级大数据玩家,对Hadoop.Storm.Spark.Flink.Kylin.D ...
- Scrapy爬虫框架学习_intermediate
一.Scrapy爬虫框架介绍 Scrapy是功能强大的非常快速的网络爬虫框架,是非常重要的python第三方库.scrapy不是一个函数功能库,而是一个爬虫框架. 1.1 Scrapy库的安装 pip ...
- python大数据培训机构_学大数据开发需要学习python吗
大数据现在互联网火热的一个名词,而和大数据关键词最紧密的相信就是Java和python了,在一年以前,Java大数据可能是很多培训机构的宣传标语.而到了2018年,python大数据则成为了潮流,无论 ...
- 大数据的主要学习内容有哪些?
大数据相关岗位目前基本都属于大缺口,高工资的黄金职业,这吸引了很多想要追赶时代潮流或是改变自己职业方向的人争相学习.大数据相关知识,自学难度大,参加培训成本又偏高,要如何选择才好呢?我们先来了解一下大 ...
- 大数据平台框架、组件以及处理流程详解
数据产品和数据密不可分作为数据产品经理理解数据从产生.存储到应用的整个流程,以及大数据建设需要采用的技术框架Hadoop是必备的知识清单,以此在搭建数据产品时能够从全局的视角理解从数据到产品化的价值. ...
- 建立大数据技术体系学习的新思维
一. 开篇 随着大数据时代的到来,各类数据都在惊人的增长,形成了WEB与社交媒体数据.机器对机器数据.大体量交易数据.生物计量数据和人工生成数据的五大类型.数据越来越不满足于处于静止状态,数据越来越处 ...
- python爱好者社区公众号历史文章合集_GitHub - acherie/weixin_crawler: 高效微信公众号历史文章和阅读数据爬虫powered by scrapy...
What is weixin_crawler? weixin_crawler是一款使用Scrapy.Flask.Echarts.Elasticsearch等实现的微信公众号文章爬虫,自带分析报告和全文 ...
- 大数据哈希学习: 现状与趋势
大数据哈希学习: 现状与趋势 李武军①②*, 周志华①②* ① 南京大学计算机软件新技术国家重点实验室, 南京210023; ② 软件新技术与产业化协同创新中心, 南京210023 * 联系人, E- ...
- 大数据开发初学者学习路线_初学者的Web开发路线图
大数据开发初学者学习路线 This beginner's roadmap lays out all the basics for web development. We're going to go ...
最新文章
- 大佬算法校招经验总结(拼多多、小米、华为、百度等)
- 【转】JDBC为什么要使用PreparedStatement而不是Statement
- CSS3盒子阴影box-shadow
- clodeblocks debug断点调试_idea debug调试————简单常用,适合初学者
- 1476D. Journey
- 关于mysql内存表的一个帖子(转载)
- 《C#多线程编程实战(原书第2版)》——3.2 在线程池中调用委托
- 平稳序列的预测和拟合之模型检验
- freebsd查询php5的版本,FreeBSD下查看各软件版本命令
- warning C4996: 'fopen': This function or variable may be unsafe.(_CRT_SECURE_NO_WARNINGS)
- Maven多工程项目
- 03-12 Android 混合页面测试
- 手机访问www如何自动跳转到m js代码实现
- Hexo博文加密思路总结
- xcode 免cleanup build
- 【数理逻辑三】命题逻辑及形式系统【下】
- Adversarial Semantic Alignment for Improved Image Captions
- GaussDB(for MySQL)近数据处理(NDP)解锁查询新姿势
- ICV:预计到2026年,全球乘用车单车将平均配置3.8颗摄像头
- YOLO v5 实现目标检测(参考数据集自制数据集)