scrapy框架第一章
操作环境:python2.7+scrapy

安装比较简单,网上教程也超多,就不在此赘述。
示例网站:https://www.cnblogs.com/cate/python/ (爬去关于博客园所有python的帖子)
#############开始新建项目 E:work\scrapy_pro\
打开cmd(命令行窗口)

cd 进入文件夹 cd..回到上一级 进入某个盘符直接输入E: 大小写没关系
############执行新建项目命令 项目名 cnblog
scrapy startproject cnblog

创建ok,进入项目cd cnblog ,操作该项目时在这一层目录。
目录如下

dir-spiders:存放所有spider的文件,里面的spider文件自己新建。
items.py:用来存放爬去的内容,在导出数据时需要用到
middlewares.py:中间件文件,写入多余的功能,比如需要与PhantomJs结合使用时修改这里。
pipelines.py:暂时没用过。
settings.py:项目配置文件。
######打开spiders文件夹开始新建spider文件 test.py 名字无所谓

打开test.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
###引入的是items.py里面构造的类
from cnblog.items import ExampleItem class TestSpider(CrawlSpider):
name = 'blog'
allowed_domains = ['cnblogs.com']
start_urls = ['https://www.cnblogs.com/cate/python/'] rules = (
###爬去索引页并跟踪其中链接
###查找start_urls 所有的分页页面
Rule(LinkExtractor(allow=r'/cate/python/[2-9]*'), follow=True),
###爬去items页面并将下载响应返回个头parse_item函数
####查询每个分页页面的详情页
Rule(LinkExtractor(allow=r'http://www.cnblogs.com/[a-z]*/p/[0-1]*'), callback='parse_item', follow=False
),
) def parse_item(self, response):
item = ExampleItem()
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
#print response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
if response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract():
item['blog_name'] = response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
else:
item['blog_name'] = 'null'
items = []
items.append(item)
return items
items.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 class ExampleItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
blog_name = scrapy.Field()
上面是两个需要用到的两个文件
前面的是spider文件,另一个是定义存储的内容文件
items.py
blog_name = scrapy.Field() //定义一个获取的字段,获取详情页的标题
test.py
from scrapy.linkextractors import LinkExtractor ##引入linkextractors 用于筛选链接和跟进链接,还有很多功能,可以去百度下
from scrapy.spiders import CrawlSpider, Rule ##定义spider的模板,引入Rule规则
from example.items import ExampleItem ##引入定义的items.py
下面是对类的详细介绍
class TestSpider(CrawlSpider): ##继承模板CrawlSpider 普通模板继承Spider
name = 'blog' ###定义spider名 运行---$ scrapy crawl blog
allowed_domains = ['cnblogs.com'] ## 定义查找范围
start_urls = ['https://www.cnblogs.com/cate/python/'] ###初始url
###通过rules限定查找的url
###分页的url ='/cate/python/[2-9]*'
###详情页的url = 'http://www.cnblogs.com/[a-z]*/p/[0-1]*'
####当有follow=True 则会跟进该页面
####原理就是 spider在初始页面查找,同时查找帖子详情页的url和下一个分页,同时跟进下一个分页页面,继续查找下一个分页页面和上面的详情页url,详情页面使用回调函数进行采集
rules = (
###爬去索引页并跟踪其中链接
###查找start_urls 所有的分页页面
Rule(LinkExtractor(allow=r'/cate/python/[2-9]*'), follow=True),
###爬去items页面并将下载响应返回个头parse_item函数
####查询每个分页页面的详情页
Rule(LinkExtractor(allow=r'http://www.cnblogs.com/[a-z]*/p/[0-1]*'), callback='parse_item', follow=False
),
)
####详情页面回调函数
def parse_item(self, response):
###实例化item类
item = ExampleItem()
###几种xpath获取标签的方式
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
#print response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
if response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract():
item['blog_name'] = response.xpath('//a[@id="Header1_HeaderTitle"]/text()').extract()
else:
item['blog_name'] = 'null'
items = []
###把数据装进仓库
items.append(item)
return items
#####现在开始执行spider
切换到当前目录

—————————导出json文件

scrapy框架第一章的更多相关文章
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- Scrapy框架: 第一个程序
首先创建项目: scrappy start project maitian 第二步: 明确要抓取的字段items.py import scrapy class MaitianItem(scrapy.I ...
- 自定义MVC框架---第一章
MVC基本介绍 介绍: mvc是一种编程思想,用来解决开发项目的时候,代码如何编写,项目如何架构的问题,更具体一点就是解决多人协同开发时,如何分工协作的问题,从而提升开发效率 举一个例子:有一个人想 ...
- 路飞学城-Python爬虫集训-第一章
自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...
- Learning Scrapy 中文版翻译 第一章
第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍
Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...
- 第一章 自定义MVC框架
第一章 自定义MVC框架1.1 MVC模式设计 组成:Model:模型,用于数据和业务的处理 View :视图,用于数据的显示 Controller:控制器 ...
- jQuery系列 第一章 jQuery框架简单介绍
第一章 jQuery框架简单介绍 1.1 jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发人员对HTML文档,DOM,事 ...
随机推荐
- MongoDB一:入门(安装与配置)
一.简介 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB MongoDB 是一个介于关系数据库和非关系数据库 ...
- 案例学习总结:原生JS实现表格排序
最近在学习js的表格排序,没想到看不起眼的表格排序实际上却暗含了众多JS知识点.在这里记录一下此次学习过程.希望对大家也有所帮助. 完整的表格排序涉及了下列这些知识点: call方法使用 sort方法 ...
- 揭秘 HashMap 实现原理(Java 8)
HashMap 作为一种容器类型,无论你是否了解过其内部的实现原理,它的大名已经频频出现在各种互联网面试中了.从基本的使用角度来说,它很简单,但从其内部的实现来看(尤其是 Java 8 的改进以来), ...
- 整合SSH时,遇到了org.springframework.beans.factory.BeanCreationException错误
严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating ...
- 驱动调试-根据oops定位错误代码行
1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来 1.1以LED驱动为例 将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示: 1.2 ...
- stm32串口接收中断协议解析
借鉴了文章:<stm32串口中断接收方式详细比较> 文章地址:http://blog.csdn.net/kevinhg/article/details/40186169 串口的配置这里不做 ...
- SAP GUI 750 安装包 及 补丁3 共享
SAP GUI 750 安装包 及 补丁3 共享 链接: https://pan.baidu.com/s/1hstkfUs%20 密码: ggbz -------------------------- ...
- shell脚本删除N天前的目录-----附linux和mac上date命令的不同
背景: 每日构建的东西.按日期放到不同的目录里. 现在天的构建放到2015-06-01里,明天的就放到2015-06-02里,依次类推.时间久了.须要一个脚本删除N天前的目录.(本例中N=7.即删除一 ...
- mapreduce作业reduce被大量kill掉
之前有一段时间.我们的hadoop2.4集群压力非常大.导致提交的job出现大量的reduce被kill掉.同样的job执行时间比在hadoop0.20.203上面长了非常多.这个问题事实上是redu ...
- 翻译:MariaDB DATABASE()
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...