(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文档是在服务器端生成的,即服务器生成好了,再发送 ...
随机推荐
- 代码混淆和dump
首先是安装和使用dump: 下载dump地址 1.选择class-dump-3.5.dmg 下载: 2.下载之后,点击打开,复制class-dump文件, 3.shift+command+G 打开fi ...
- 常用PowerShell命令
查看版本: 文件重命名: 别名查看: 当前路径:(别名pwd) 切换路径:(别名cd) 子列表:(别名ls -Force可查看隐藏项) 查看用户:(可显示隐藏) 资源管理器打开当前目录:(cmd亦可 ...
- jquery插件layer
//信息框-例1 layer.alert('见到你真的很高兴', {icon: 6}); //信息框-例2 layer.confirm('你确定你很帅么?', {icon: 3}, function( ...
- 自定义AngularJS中的services服务
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- VMware虚拟机修改BIOS启动项
vmware默认是硬盘启动,要进bios里面设置成开机的启动顺序,要将光盘设置成第一启动项.但vm的开机画面比笔记本的还要快很多,基本都在1s内的,想进入 bios里面也有难度.. 对于网上说的开vm ...
- 判断js中数据类型 的最短代码
判断字符串类型的: function isString(obj) { return obj+"" === obj; } 判断bool类型的: function isBool(obj ...
- ABAP术语-Error Message
Error Message 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/30/1058283.html Information from ...
- python脚本批量杀死redis链接
#!/usr/bin/python #coding:utf8 import sys import commands,time,re ##自定义redis链接类 from redismodel impo ...
- IDEA中使用插件添加更多可选择的主题,使代码高亮,缓解视觉疲劳
1.点击 File-->settings(或Ctrl+Shift+S)打开IDE设置面板 点击plugins-->右侧选择Marketplace-->搜索框中输入Material-- ...
- 源码安装CentOs7下的PHP7
首先安装APACHE环境,直接用yum安装 yum install httpd httpd-devel /etc/httpd/ systemctl start httpd.service #启动apa ...