(2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍
2015-09-02 17:07
555 查看
本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法:
一,猜想
我们说的爬虫,一般至少要包含几个基本要素:
1.请求发送对象(sender,对于request的封装,防止被封)
2.解析文档对象(将请求的网页当作是html文档还是字符串)
3.承载所需要的解析对象(标准格式的数据承载者)
4.获取所需对象后的操作者 (得到对象后,是以文件形式保存还是存入数据库)
5.整个流程的错误处理者(整个流程的异常监控者)
二,验证
我们来看看Scrapy 提供了哪些核心的对象
refer from :https://scrapy-chs.readthedocs.org/zh_CN/0.24/
基本上我们所设想的对象Scrapy都会包含在里面了
三,爬取
我们知道,一般爬虫都是按如下规则来爬取数据的
输入目标网址=> 编写处理规则(正则表达式或者xpath语法)=>对得到的数据进行处理
Scrapy的做法如下:
1)新建一个项目
以命令行形式切换到需要将代码放置的文件夹下,然后输入如下命令:
文件夹下会生成一个cnblogs的文件下,切换到该文件夹下(记住切换)
Item.py就是我们所需要数据承载器
修改为如下代码:
在Spider文件夹下添加BasicGroupSpider.py 修改为如下内容
OK ,回到第一步的命令台的界面,输入如下命令
四,结果
关于里面的代码功能,自己去理解吧,写过代码的人大致都了解。
====>DEMO下载<====
总结:
本次主要分析了爬虫框架的大致构件,并验证了我们的猜想,关于python的爬虫框架有很多,不过像scrapy这样值得入手和研究的,比较少了,.net下的更少了。
一,猜想
我们说的爬虫,一般至少要包含几个基本要素:
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下的更少了。
相关文章推荐
- #2018 母牛的故事
- windows服务部署
- CRM4.0 常用代码汇总
- 关于主键生成器
- 漫谈C指针第二讲---变量赋值与取地址
- vba判断文件是否存在的两种方法
- C# ASP.NET 后台界面加载时调用前台JavaScript脚本:Attributes.Add()
- MyBatis学习笔记(八)分页查询
- 你写的Try...Catch真的有必要么?
- spring mvc使用spring ehcache缓存
- 初识泛型
- VMware Workstation 9.0.0 如何收缩虚机磁盘空间?
- centos6.5搭建流媒体服务器
- 图算法
- Android中style和theme巧用:Android应用程序启动时背景画面的显示问题
- attr陷阱
- linux for循环
- spring mvc 完整配置
- 批量修改Excel中的图片大小方法
- 修改我的文档等的路径