本篇博文将非常详细地介绍如何一步一步从零开始搭建爬虫项目,并给出运行结果,把结果保存为本地json文件。
文章非常适合入门的小伙伴们一起学习和研究。经过实测验证,代码可以成功运行。文章最后给出github免费的源码下载地址
http://www.itcast.cn/channel/teacher.shtml
.
.
我们将要爬取所有老师的姓名、职位和简介信息,如下图所示:
我们在目标网站中使用Chrome浏览器右键选择检查可以看到以上代码
.
.
scrapy
python3
.
.
cmd输入:
scrapy startproject Teacher
表示创建一个scrapy项目
回车以后,桌面就会出现一个Teacher文件夹,所含内容如下:
目前我们的cmd目录还是在桌面,现在我们cd到该文件夹中,以便后续操作,cmd中输入cd Teacher即可,然后再进入下面步骤
.
cmd输入
scrapy genspider test www.itcast.cn
表示创建一个为test的爬虫文件,并限制在www.itcast.cn域下爬取
我们就在spiders文件夹下建立了我们的爬虫文件,名字为test.py
.
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
上面分别定义了我们需要的三个字段信息,分别对应老师的姓名、职位和简介信息。
.
settings.py
该文件为配置文件,文件内容做以下修改:
首先,由于是学习用,可以不遵守robots.txt协议,因此找到ROBOTSTXT_OBEY进行修改
ROBOTSTXT_OBEY = False
其次,我们把67行左右的ITEM_PIPELINES 注释去掉,得到
ITEM_PIPELINES = {
'Teacher.pipelines.TeacherPipeline': 300,
}
通过以上两个步骤,分别是修改成False和取消注释,我们的配置就完成了。
.
这里推荐安装Chrome的xpath helper插件来帮助我们分析,方便我们写爬虫文件,我们在黑框中输入xpath语法,即可在右侧提取出我们需要的信息。黑框中的xpath代码是下一步我们需要填写到爬虫文件中的。
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列表中的第一个元素,不用的话会爬取到很多无关的数据。
.
cmd输入:
scrapy crawl test -o ts.json
表示开始爬取,这里的test即为我们上面文件内容中的name变量,将其保存为json格式,另外也可以存为cvs格式,把ts.json改为ts.cvs即可。
最后得到结果,我们查看文件夹,多了一个ts.json:
打开这个文件,观察内容,是Json默认的格式:
上面得到的结果不便于观察,为此我们需要对json数据进行解析,可以借助以下工具。
json格式化工具网址:
https://www.json.cn/
然后我们在其中填入文件中的内容,解析出如下结果:
到这里,我们就成功地实现了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
如果有帮助到你,请点个赞或关注对博主进行鼓励,后续还会继续更新进阶的爬虫案例,有任何疑问请下方评论留言,感谢!