(2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍
本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法:
一,猜想
我们说的爬虫,一般至少要包含几个基本要素:
1.请求发送对象(sender,对于request的封装,防止被封)
2.解析文档对象(将请求的网页当作是html文档还是字符串)
3.承载所需要的解析对象(标准格式的数据承载者)
4.获取所需对象后的操作者 (得到对象后,是以文件形式保存还是存入数据库)
5.整个流程的错误处理者(整个流程的异常监控者)

二,验证
我们来看看Scrapy 提供了哪些核心的对象
基本概念
- 命令行工具(Command line tools)
- 学习用于管理Scrapy项目的命令行工具
- Items
- 定义爬取的数据
- Spiders
- 编写爬取网站的规则
- 选择器(Selectors)
- 使用XPath提取网页的数据
- Scrapy终端(Scrapy shell)
- 在交互环境中测试提取数据的代码
- Item Loaders
- 使用爬取到的数据填充item
- Item Pipeline
- 后处理(Post-process),存储爬取的数据
- Feed exports
- 以不同格式输出爬取数据到不同的存储端
- Link Extractors
- 方便用于提取后续跟进链接的类。
refer from :https://scrapy-chs.readthedocs.org/zh_CN/0.24/
基本上我们所设想的对象Scrapy都会包含在里面了
三,爬取
我们知道,一般爬虫都是按如下规则来爬取数据的
输入目标网址=> 编写处理规则(正则表达式或者xpath语法)=>对得到的数据进行处理
Scrapy的做法如下:
1)新建一个项目
以命令行形式切换到需要将代码放置的文件夹下,然后输入如下命令:
scrapy startproject cnblogs
文件夹下会生成一个cnblogs的文件下,切换到该文件夹下(记住切换)

Item.py就是我们所需要数据承载器
修改为如下代码:
# -*- coding: utf-8 -*- # Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html import scrapy
from scrapy.item import Field,Item class CnblogsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field() Title = Field()
TitleUrl = Field()
在Spider文件夹下添加BasicGroupSpider.py 修改为如下内容
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from cnblogs.items import CnblogsItem class CnblogsSpider(BaseSpider):
name = "cnblogs" #spider的名字
allowed_domains = ["cnblogs.com"]
start_urls = [
'http://www.cnblogs.com/'
] #待抓取的列表 def parse(self, response):
self.log("Fetch douban homepage page: %s" % response.url)
hxs = HtmlXPathSelector(response) #authors = hxs.select('//a[@class="titlelnk"]') items = hxs.select('//a[contains(@class, "titlelnk")]') listitems = [] for author in items:
#print author.select('text()').extract()
item = CnblogsItem()
#property
item['Title'] = author.select('text()').extract()
item['TitleUrl'] =author.select('@href').extract()
listitems.append(item) return listitems
OK ,回到第一步的命令台的界面,输入如下命令
scrapy crawl cnblogs --logfile=test.log -o cnblogs.json -t json
四,结果

关于里面的代码功能,自己去理解吧,写过代码的人大致都了解。
====>DEMO下载<====
总结:
本次主要分析了爬虫框架的大致构件,并验证了我们的猜想,关于python的爬虫框架有很多,不过像scrapy这样值得入手和研究的,比较少了,.net下的更少了。
(2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍的更多相关文章
- (5)分布式下的爬虫Scrapy应该如何做-windows下的redis的安装与配置
软件版本: redis-2.4.6-setup-64-bit.exe — Redis 2.4.6 Windows Setup (64-bit) 系统: win7 64bit 本篇的内容是为了给分布式下 ...
- (4)分布式下的爬虫Scrapy应该如何做-规则自动爬取及命令行下传参
本次探讨的主题是规则爬取的实现及命令行下的自定义参数的传递,规则下的爬虫在我看来才是真正意义上的爬虫. 我们选从逻辑上来看,这种爬虫是如何工作的: 我们给定一个起点的url link ,进入页面之后提 ...
- (8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)
转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能 ...
- (3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接
放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题: 1.如何连续爬取 2.数据输出方式 3.数据库链接 一,如何连续爬取: 思考:要达到连续爬取,逻辑上无非从以下的方向着 ...
- (1)分布式下的爬虫Scrapy应该如何做-安装
关于Scrapy的安装,网上一搜一大把,一个一个的安装说实话是有点麻烦,那有没有一键安装的?答案显然是有的,下面就是给神器的介绍: 主页:http://conda.pydata.org/docs/ 下 ...
- (9)分布式下的爬虫Scrapy应该如何做-关于ajax抓取的处理(一)
转载请注明出处:http://www.cnblogs.com/codefish/p/4993809.html 最近在群里频繁的被问到ajax和js的处理问题,我们都知道,现在很多的页面都是用动态加载的 ...
- 同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来 ...
- 【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
[初码文章推荐] 程序员的自我修养 Azure系列文章 阿里云系列文章 爬虫系列文章 [初码产品推荐] AlphaMS开发模式 闪送达城市中央厨房 今天带来一个有意思的东西-分布式B站爬虫任务系统 这 ...
- Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】
(1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...
随机推荐
- mac下登录服务器
1.先通过帐号密码登录到服务器: ssh 用户名@服务器地址 https://jingyan.baidu.com/article/546ae1853132bf1148f28c42.html 2.登录后 ...
- MYSQL5.7.15安装步骤
下载完成之后双击安装: 接下来一路next (出现的问题) 在我第一次安装myslq过程中,上图中的mysql server failed ,这是因为电脑环境需要升级一个插件,Visual C++ 2 ...
- 了解Mysql与MariaDb的关系
MariaDB是MySQL源代码的一个分支,随着Oracle买下Sun,MySQL也落入了关系型数据库王者之手.在意识到Oracle会对MySQL许可做什么后便分离了出来(MySQL先后被Sun.Or ...
- 【luogu P3375 KMP字符串匹配】 模板
题目链接:https://www.luogu.org/problemnew/show/P3375 精华:在每次失配后不从头匹配而是尝试找一个新的开始并且是新开始的位置最长的相同前缀和后缀. 实际上KM ...
- 学大伟业 Day 4 培训总结
今天讲的全是dp... 不多废话,先看一道经典的模板LIS(最长不下降子序列) 一.LIS 给定一个长度为N的数列,求最长上升子序列 例:1 7 2 8 3 4 答案:1 2 3 4 代码: #inc ...
- 外部的 JavaScript
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- linux多线程编程基本操作(2)
linux c多线程总结: :关于线程和进程 a:使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.我们知道,在Linux系统下,启动一个新的进程必须分配给 ...
- 时间戳转化为时间&&截取时间的年月日
时间戳转化为正常的时间格式 function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { // 在这里 date.getFullYear() + ' ...
- Nacicat for Oracle 绿色版 亲测可用
参考: http://blog.csdn.net/u013107634/article/details/52741591 https://blog.csdn.net/zhengyikuangge/ar ...
- php第三节(运算符)
<?php //算术运算符 + - * / % //++ 前加加 先做加运算后座赋值运算 后加加 先做赋值运算后座加运算 //-- 前减减 先做加运算后座赋值运算 后减减 先做赋值运算后座加运算 ...