操作环境: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 crawl blog-o data.json -t json  -s LOG_LEVEl=ERROR
注意:执行的是spider 的name, 后面的内容是设置导出文件的类型,名字以及log的级别,设置为error级别。
下一次教大家怎么配合PhantomJS来写爬虫。
我的邮箱是1107949255@qq.com有兴趣的同学可以一起交流,非诚勿扰。

scrapy框架第一章的更多相关文章

  1. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  2. Scrapy框架: 第一个程序

    首先创建项目: scrappy start project maitian 第二步: 明确要抓取的字段items.py import scrapy class MaitianItem(scrapy.I ...

  3. 自定义MVC框架---第一章

    MVC基本介绍 介绍:  mvc是一种编程思想,用来解决开发项目的时候,代码如何编写,项目如何架构的问题,更具体一点就是解决多人协同开发时,如何分工协作的问题,从而提升开发效率 举一个例子:有一个人想 ...

  4. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  5. Learning Scrapy 中文版翻译 第一章

    第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...

  6. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  7. 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍

    Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...

  8. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  9. jQuery系列 第一章 jQuery框架简单介绍

    第一章 jQuery框架简单介绍 1.1 jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发人员对HTML文档,DOM,事 ...

随机推荐

  1. 尚未解决的selenium 定位

    自从入职以来,一直在写selenium自动化脚本,可是最近因为一个问题止步不前.可是也不能一直原地踏步呀在这里把问题先记录一下,免得以后忘了. 前景: 做一个表单的提交,点击按钮,执行某函数,若表单中 ...

  2. JavaScript实现动画效果

    说到JavaScript实现动画效果,不得不想到两个函数,setTimeout和setInterval. setTimeout的常用的使用方法为 setTimeout(callback, delay) ...

  3. 简单模板view调用

    $this->display();//模板名称与当前控制器.当前操作方法的名称不一致 $this->display();//调用当前控制器对应目录指定名称的模板 $this->dis ...

  4. HDU 1014 Uniform Generator 欧几里得

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 解题思路: 1. 把题目意思读懂后,明白会输入两个数,然后根据题中的公式产生一系列伪随机数,看这 ...

  5. 打开和创建SqlCe(.sdf文件)

    打开SqlCe的工具有些少,目前能看到Vs2010安装插件之后打开.sdf文件 [转载]https://weblogs.asp.net/scottgu/vs-2010-sp1-and-sql-ce 需 ...

  6. DOMContentLoaded、readystatechange、load、ready详谈

    对前端同学而言,loade,unload,DOMContentLoaded等页面加载过程中会触发的事件肯定是都接触过,不过要是具体问各个事件的区别,我就不是那么能清晰的解答上来的了.正好刚刚在无阻塞脚 ...

  7. Qwt安装(转)

    ======= 安装 ======= Qwt使用qmake编译所有的组件和示例. qmake是Qt发布中的一部分. qmake读取工程文件,工程文件包含了如何工程选项和如何编译特定工程的规则.一个工程 ...

  8. c++中虚多态的实现机制

    c++中虚多态的实现机制 參考博客:http://blog.csdn.net/neiloid/article/details/6934135 序言 证明vptr指针存在 无继承 单继承无覆盖 单继承有 ...

  9. Intellij IDEA安装golang插件

    原文作者:Jianan - qinxiandiqi@foxmail.com 原文地址:http://blog.csdn.net/qinxiandiqi/article/details/50319953 ...

  10. ABP入门系列(21)——切换MySQL数据库

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 Abp支持MySql已经不是什么新鲜事了,但按照官方文档:Entity Framewo ...