(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文档是在服务器端生成的,即服务器生成好了,再发送 ...
随机推荐
- 布局方式-flex布局
.弹性盒子 .盒子本来就是并列的 .指定宽度即可 <style> .container { width: 800px; height: 200px; display: flex; bord ...
- POJ 1330 Nearest Common Ancestors 【LCA模板题】
任意门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000 ...
- sting.Contains()方法
作用: 返回一个值,判断给定的string对象 是否出现在指定的字符串当中 例子: if(str_arr[i].Contains(textBox1.Text)){//检查是否有匹配
- 使用ParseExact方法将字符串转换为日期格式
实现效果: 知识运用: DateTime结构的ParseExact方法 public static DateTime ParseExact(string s,string format,IFormat ...
- 【洛谷P1966】火柴排队
火柴排队 题目链接 ∑(ai−bi)^2=∑ai^2-2*∑ai*bi+∑bi^2 显然∑ai^2+∑bi^2是不变的,我们要让 2*∑ai*bi最大,才能使原式最小 然后我们一眼就可以看出来, ...
- 分享一个展示文章列表的CSS样式
最近在帮朋友处理一个网站前端显示文章列表的时候,其中有个变通的思路,现整理出来留给有需要的朋友参考及自己备忘. 显示效果为:标题左对齐,日期右对齐. 标题和日期中间用常规的原点(“.”) 代替,显示效 ...
- Flask—06-理解掌握flask数据模型(02)
数据模型 模型关系 一对多(使用最多) 一:学生(Student) 需要添加反向引用 多:文章(Article) 需要添加外键关联 一对一 一:学生(Student),主表 需要添加反向引用,在一对多 ...
- iOS之已经审核通过的app在App Store上搜不到的解决办法
修改定价将你的app定价修改成0.99刀 修改你的发行范围,全取消后只选中国. save这时候你的app status将会变成pending contract. 将之前的修改都改回来,修改定价free ...
- C++调用WMI类查询获取操作系统名
#define _WIN32_DCOM #include <iostream> #include <comdef.h> #include <Wbemidl.h> u ...
- MySQL-5.7.20主从复制测试[20180110]
前言 MySQL 5.7.20测试主从复制 环境 主库 192.168.1.59 t-xi-sonar01 从库 192.168.1.51 t-xi-orc01 设 ...