1. 新建scrapy项目

scrapy startproject mySpider

得到了如下的文件

其内部文件结构如下:

2. 爬虫文件:

我们打算抓取:http://www.itcast.cn/channel/teacher.shtml 网站里的所有讲师的姓名、职称和个人信息。

2.1. 查看需要爬取内容存在哪里:

我们可以通过response.xpath提取相关内容


for each in reponse.xpath('//div[@class = "li_txt"]'):
name = each.xpath('./h3/text()')
title = each.xpath('./h4/text()')
info = each.xpath('./p/text()')

2.2. 设置item需要保存的数据变量

import scrapy

class MyspiderItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field()

2.3. 创建爬虫文件

  • 在mySpider下的spiders文件夹下创建一个新的爬虫文件命名为itcastspider.py
import scrapy
from mySpider.items import MyspiderItem # 创建一个爬虫 class ItcaseSpider(scrapy.Spider):
# 爬虫名
name = "itcast"
# 允许爬虫作用的范围
allowed_domains = ['http://www.itcast.cn/']
# 爬虫开始的url
start_urls = ["http://www.itcast.cn/channel/teacher.shtml#ajavaee"] # setting -> name -> allowed_domains ->start_urls -> request
# request -> scrapy engine -> scheduler -> downloader -> download from inetrnet(自动执行)
# Downloader -> spider ->调用parse方法
def parse(self, response):
# with open("teacher.html", 'wb') as f:
# f.write(response.body) # 读取响应文件内容 # 所有老师列表集合
teacherItem = [] for each in response.xpath('//div[@class = "li_txt"]'):
# 将我们得到的数据封装到一个 `MyspiderItem` 对象
item = MyspiderItem() # 通过extract()转换为unicode字符串
# 不加extract()就是xpath匹配的对象而已
name = each.xpath('./h3/text()').extract() # xpath返回的都是列表,元素根据匹配规则来(e.g. text())
title = each.xpath('./h4/text()').extract()
info = each.xpath('./p/text()').extract() item['name'] = name [0]
item['title'] = title[0]
item['info'] = info[0] teacherItem.append(item)
# 直接返回数据,用于保存类型
return teacherItem

2.4. 保存数据

scrapy保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,,命令如下:

# json格式,默认为Unicode编码
scrapy crawl itcast -o teachers.json # json lines格式,默认为Unicode编码
scrapy crawl itcast -o teachers.jsonl # csv 逗号表达式,可用Excel打开
scrapy crawl itcast -o teachers.csv # xml格式
scrapy crawl itcast -o teachers.xml

2.5. yield的用法

我们可以将上面的return方法换成yield为一个生成迭代器

  1. yield每一次都传递给一个数据给管道文件
#xpath返回的是包含一个元素的列表
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0] #items.append(item) #将获取的数据交给pipelines
yield item
  1. yield传递的管道文件需要重写
import json

class ItcastPipeline(object):

    # __init__可选的,初始化文件
def __init__(self):
self.filename = open("yieldmethod.json", "wb") # 处理Item数据的,必须写的
def process_item(self, item, spider):
jsontext = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.filename.write(jsontext.encode("utf-8"))
return item # 可选的,执行结束时的方法
def close_spider(self,spider):
self.filename.close()

3. 在PyCharm中运行scrapy

3.1. 方法一: 直接走PyCharm中的terminal中执行

3.2. 方法二: 新建start.py并添加到configration中

from scrapy import cmdline
cmdline.execute("scrapy crawl itcast".split())

4. 结果

Scrapy案例01-爬取传智播客主页上的老师信息的更多相关文章

  1. web开发流程(传智播客-方立勋老师)

    1.搭建开发环境 1.1 导入项目所需的开发包 dom4j-1.6.1.jar jaxen-1.1-beta-6.jar commons-beanutils-1.8.0.jar commons-log ...

  2. 揭秘上海传智播客平均工资超过7k 其中一位知情人士

    大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...

  3. 揭秘传智播客班级毕业薪资超7k的内幕系列 之三 ----国企慕名而来,将未毕业学员“抢走”,传智播客又一次定义“被就业”

    前面文章提及Java六期学员张同学提前就业某国企,入职薪资6.3k,各种福利齐全.作为班级首位就业同学,他的就业也成为了班级其它同学就业的风向标.但事实上张同学的就业属于"被就业" ...

  4. 传智播客JDBC视频教程

    视频介绍: 一些视频教程通过浅显案例来让刚開始学习的人感到轻松,可是课程中编写的代码不能直接应用于项目中:而本套视频教程正好相反,视频解说者李勇老师以技术见长.性格朴实无华.不善于幽默搞笑.李勇老师编 ...

  5. 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业

    在上海传智播客宋学生Java六期学员.在班级尚未毕业阶段,私自投递简历,而且逃课去面试,获得某国企的Offer.入职薪资5.7K,,兼有五险一金.饭补等齐全福利,因就业老师要求班级同学未毕业不要急于就 ...

  6. 成都传智播客JDBC视频及讲师介绍

    成都传智播客java讲师,也许,你跟他很熟,你或者听过他的课,或者跟他争论过什么,又或者你们在一起共事,再者你们只是偶尔擦肩而过.在小编的印象中郭老师完全没有架子,和他相处会让你觉得不是面对一个老师, ...

  7. 揭秘传智播客班级毕业薪资超7k的内幕系列之四----汽车工的华丽转身

         ---不是本科毕业?不是计算机专业?做过电子厂?做过数控?看传智中专生侃项目,"侃晕"项目经理.从流水线上华丽转身,8.5k高薪再就业      系列三承诺写写上海传智J ...

  8. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  9. 传智播客张孝祥java邮件开发随笔01

    01_传智播客张孝祥java邮件开发_课程价值与目标介绍 02_传智播客张孝祥java邮件开发_邮件方面的基本常识 03_传智播客张孝祥java邮件开发_手工体验smtp和pop3协议 第3课时 关于 ...

随机推荐

  1. 网络协议 8 - TCP协议(上):性恶就要套路深

    系列文章: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网络协议 ...

  2. JDK1.8 ConcurrentHashMap源码阅读

    1.  带着问题去阅读 为什么说ConcurrentHashMap是线程安全的?或者说 ConcurrentHashMap是如何防止并发的? 2.  字段和常量 首先,来看一下ConcurrentHa ...

  3. 华为oj之字符个数统计

    题目:字符个数统计 热度指数:4720 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127). ...

  4. Spring Cloud Eureka基本概述

    记一次Eureka的进一步学习. 一.Eureka简介 百科描述:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡 ...

  5. 大战Java虚拟机【3】—— 类加载机制

    前言 当你的代码编译成class文件之后,那么虚拟机如何加载这些文件呢?我们需要知道虚拟机到底做了什么样的事情. 类的生命周期 加载--链接---初始化----使用---卸载 类加载过程 1.加载 读 ...

  6. 【WCF系列】(一)为什么我们需要WCF

    为什么我们需要WCF 传统分布式软件的架构分析 一个开发需求:社保平台 访问量较大客户端类型/平台多和其他系统交互多快速开发/部署结构复杂(B/S.C/S.桌面.服务…) 传统的实现技术: 业界需要一 ...

  7. 补习系列(10)-springboot 之配置读取

    目录 简介 一.配置样例 二.如何注入配置 1. 缺省配置文件 2. 使用注解 3. 启动参数 还有.. 三.如何读取配置 @Value 注解 Environment 接口 @Configuratio ...

  8. linux 远程复制 scp

    把本地/home/crawler/warning/python/alarmRun.sh 复制到67cralwer用户/home/crawler/warning/python/ 下面 scp -r /h ...

  9. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  10. 多种Timer的场景应用

    前言 今天讲讲各种Timer的使用. 三种Timer组件 .Net框架提供了三种常规Timer组件,分别是System.Windows.Forms.Timer.System.Timers.Timer和 ...