scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)

  本篇博文将非常详细地介绍如何一步一步从零开始搭建爬虫项目,并给出运行结果,把结果保存为本地json文件。
  文章非常适合入门的小伙伴们一起学习和研究。经过实测验证,代码可以成功运行。文章最后给出github免费的源码下载地址

一、爬取目标网站:

http://www.itcast.cn/channel/teacher.shtml
.
.

二、爬取目标信息:

  我们将要爬取所有老师的姓名、职位和简介信息,如下图所示:
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第1张图片
  我们在目标网站中使用Chrome浏览器右键选择检查可以看到以上代码
.
.

三、爬取前必须安装好的环境:

scrapy
python3
.
.

四、爬取详细步骤

1.创建爬虫项目

cmd输入:
scrapy startproject Teacher
表示创建一个scrapy项目
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第2张图片
回车以后,桌面就会出现一个Teacher文件夹,所含内容如下:
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第3张图片
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第4张图片
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第5张图片
目前我们的cmd目录还是在桌面,现在我们cd到该文件夹中,以便后续操作,cmd中输入cd Teacher即可,然后再进入下面步骤
.

2.创建爬虫文件

cmd输入
scrapy genspider test www.itcast.cn
表示创建一个为test的爬虫文件,并限制在www.itcast.cn域下爬取
在这里插入图片描述
我们就在spiders文件夹下建立了我们的爬虫文件,名字为test.py
.

3.编写文件items.py

  该文件用于定义我们要爬取的是哪些具体内容,相当于数据库中的字段或者java中的Pojo类。

文件内容为:

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class TeacherItem(scrapy.Item):
    # define the fields for your item here like:

    name = scrapy.Field()

    title = scrapy.Field()

    info = scrapy.Field()    
    #pass

  上面分别定义了我们需要的三个字段信息,分别对应老师的姓名、职位和简介信息。
.

4.编写文件settings.py

该文件为配置文件,文件内容做以下修改:
首先,由于是学习用,可以不遵守robots.txt协议,因此找到ROBOTSTXT_OBEY进行修改

ROBOTSTXT_OBEY = False

其次,我们把67行左右的ITEM_PIPELINES 注释去掉,得到

ITEM_PIPELINES = {
    'Teacher.pipelines.TeacherPipeline': 300,
}

通过以上两个步骤,分别是修改成False和取消注释,我们的配置就完成了。
.

5.查看网站源码,确定我们的xpath

  这里推荐安装Chrome的xpath helper插件来帮助我们分析,方便我们写爬虫文件,我们在黑框中输入xpath语法,即可在右侧提取出我们需要的信息。黑框中的xpath代码是下一步我们需要填写到爬虫文件中的。
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第6张图片

6.编写爬虫文件test.py

文件内容为:

# -*- coding: utf-8 -*-
import scrapy
from Teacher.items import TeacherItem

class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['www.itcast.cn']
    start_urls = ['http://www.itcast.cn/channel/teacher.shtml']

    def parse(self, response):
        node_list = response.xpath("//div[@class='li_txt']")

        items=[]
        for node in node_list:

            item = TeacherItem()

            name = node.xpath("./h3/text()").extract()
            title = node.xpath("./h4/text()").extract()
            info = node.xpath("./p/text()").extract()
            
            item['name'] = name[0]
            item['title'] = title[0]
            item['info'] = info[0]
            items.append(item)
            
        return items

为了避免乱码,因此不在文件中进行注释了,下面简要进行介绍:

name = 'test'起了个爬虫名,这个爬虫名代表整个文件

allowed_domains = ['www.itcast.cn']表示我们只在这个网站区域内爬,不会爬到外面去。

start_urls = ['http://www.itcast.cn/channel/teacher.shtml']表示我们从这个网址开始爬。

node_list = response.xpath("//div[@class='li_txt']")表示我们爬取的源码位置,建议小伙伴们先百度了解一下xpath语法

name = node.xpath("./h3/text()").extract()表示爬取h3标签下的文本,.extract()将xpath对象转化为Unicode字符串格式

item['name'] = name[0]表示每次取name列表中的第一个元素,不用的话会爬取到很多无关的数据。
.

7.开始爬取,保存为json格式

cmd输入:
scrapy crawl test -o ts.json

表示开始爬取,这里的test即为我们上面文件内容中的name变量,将其保存为json格式,另外也可以存为cvs格式,把ts.json改为ts.cvs即可。
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第7张图片

最后得到结果,我们查看文件夹,多了一个ts.json:
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第8张图片
打开这个文件,观察内容,是Json默认的格式:
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第9张图片

8.用json格式化工具查看最后结果

上面得到的结果不便于观察,为此我们需要对json数据进行解析,可以借助以下工具。
json格式化工具网址:
https://www.json.cn/
然后我们在其中填入文件中的内容,解析出如下结果:
scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(一)_第10张图片

  到这里,我们就成功地实现了scrapy爬虫。

下一篇文章:scrapy爬虫框架实现传智播客师资库信息爬取-入门案例详解(二)
https://blog.csdn.net/fallwind_of_july/article/details/97390118
将讲述如何通过编写管道文件来对文件进行保存,是本文的优化版,有兴趣的小伙伴可以点击以上链接继续学习。

最后福利,很适合学习的本项目配套视频:
https://www.bilibili.com/video/av13663892/?p=5

本文的源码下载(Teacher文件夹):
https://github.com/AndyofJuly/scrapyDemo

如果有帮助到你,请点个赞或关注对博主进行鼓励,后续还会继续更新进阶的爬虫案例,有任何疑问请下方评论留言,感谢!

你可能感兴趣的:(python)