scrapy爬虫基本指令要点
英语词汇
genspider:生成爬虫 itcast:传智播客
itcast.cn:传智播客的网址 deploy:部署
pipeline:管道
1.安装scrapy
pip install scrapy
2.创建项目
scrapy startproject myspider1
3.查看新建项目的根目录
ls
cd myspider1
tree myspider1/
4.创建爬虫
scrapy genspider 爬虫名字 允许爬取的域名(url)
例子:
cd myspider1/ myspider1
scrapy genspider itcast itcast.cn
5.修改刚创建好的itcast文件中的源码
import scrapy
#定义爬虫类
class ItcastSpider(scrapy.Spider):
# 定义爬虫的名字
name = 'itcast'
# 域名进行链接
allowed_domains = ['itcast.cn']
# 爬虫起始的url,一般是自己修改
start_urls = ['http://itcast.cn/']
# 定义解析。从中获取网址的数据!!
# 定义对于网址的相关操作
def parse(self, response): # response所对应的start_urls
with open('itcase.html','wb') as f:
f.write(response.body)
6.运行 scrapy
命令:在项目目录下执行scrapy crawl 爬虫名字
生成日志文件: scrapy crawl itcast #crawl :爬取
7.ls命令查看生成的html文件
8.完成爬虫
itcast.py内部的源码:
修改起始的url
检查修改允许的域名
在parse方法中实现爬取逻辑
#itcast.py
import scrapy
# =============================================================================
# #定义爬虫类
# =============================================================================
class ItcastSpider(scrapy.Spider):
# 定义爬虫的名字
name = 'itcast'
#2.检查域名
allowed_domains = ['itcast.cn']
# 1.修改起始的url
start_urls = ['http://www.itcast.cn/channel/teacher.shtml#javaee']
#3.在parse方法中实现爬取逻辑
def parse(self, response): # response所对应的start_urls
# =============================================================================
# # 获取所有教师节点
# =============================================================================
node_list = response.xpath('//div[@class="main_bot"]')
# =============================================================================
# #遍历教师节点列表
# =============================================================================
# print(len(node_list)) #测试使用
# 遍历每一个结点
for node in node_list:
# 创建一个字典
temp = {}
#xpath方法返回的是选择器对象列表,extract()用于从选择器中提取数据
temp['name'] = node.xpath('./h2/text()').extract_first() #获取第一个值!!
temp['title'] = node.xpath('./h3/./span/text()')[0].extract()
temp['desc'] = node.xpath('./p/./span/text()').extract_first()
# print(temp) #测试使用
# break #测试使用
#xpath结果为只含有一个值的列表,可以使用extract_first(),如果为多个值得则使用extract()
yield temp #yield将获取的数据保存起来,并且还没有结束(可适用于获取不同页面的数据)