分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法:

一,猜想

我们说的爬虫,一般至少要包含几个基本要素:

1.请求发送对象(sender,对于request的封装,防止被封)

2.解析文档对象(将请求的网页当作是html文档还是字符串)

3.承载所需要的解析对象(标准格式的数据承载者)

4.获取所需对象后的操作者 (得到对象后,是以文件形式保存还是存入数据库)

5.整个流程的错误处理者(整个流程的异常监控者)

二,验证

我们来看看Scrapy 提供了哪些核心的对象

基本概念命令行工具(Command line tools)学习用于管理Scrapy项目的命令行工具Items定义爬取的数据Spiders编写爬取网站的规则选择器(Selectors)使用XPath提取网页的数据Scrapy终端(Scrapy shell)在交互环境中测试提取数据的代码Item Loaders使用爬取到的数据填充itemItem 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下的更少了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航