版权声明:只要点赞,这篇文章就是你的。 https://blog.csdn.net/weixin_36691991/article/details/89295494
一、安装环境 scrapy 安装 win安装 1.安装Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/ Twisted‑18.9.0‑cp36‑cp36m‑win32.whl cp36 是python版本win32是python的位数 2.命令安装 pip install Twisted‑18.9.0‑cp36‑cp36m‑win32.whl 3.pip install scrapy pip list 查看已经安装的第三方库 二、基本介绍 之前学习的请求库:urllib urllib3 requeste 解析库:re lxml Bs4(BeautifulSoup4) scripy是纯python开发的一个高效结构化的网页抓取框架 三、命令 1.全局命令 scrapy startproject 创建项目 2.项目命令 scrapy genspider [options] <name> <domain>创建爬虫文件 scrapy genspider baidu_spider baidu.com scrapy crawl 运行爬虫 scrapy list 查看当前项目可运行的爬虫
四、注意事项
此框架默认遵守robots协议 可以在settings中修改ROBOTSTXT_OBEY为false
五、运行流程,看一开始的图
scrapy 运行流程 engine(引擎) spider(爬虫文件) engine(引擎) scheduler(调度器) downloader(下载器) engine(引擎) spider(爬虫文件) tiem(管道)
六、
实际案例 第一步 创建项目 scrapy startproject TanzhouSpider 第二步 创建spider文件 scrapy genspider tz_spider shiguangkey.com 第三步 编写items文件,知道自己需要抓取的数据 第四步 解析数据,提取Request或者items 第五步 保存数据 用的到基础知识点: yield 生成器 回调函数 isinstance 判断实例类型 zip 方法两个列表,返回一个大的列表,元素是一一对应的元组
spider文件中的内容:
# -*- coding: utf-8 -*-
import scrapy
from ..items import MyspiderItem
class TzSpiderSpider(scrapy.Spider):
name = 'tz_spider'
# allowed_domains = ['shiguangkey.com']
start_urls = ['http://ke.qq.com/course/list?mt=100{}'.format(i) for i in range(1,7)]
def parse(self, response):
# 解析数据
# print(response.url+'========')
titles = response.xpath('//h4[@class="item-tt"]/a/text()')
# print('title',title)#匹配出来的是对象
titles = titles.extract()
# print(title)#匹配出来的是列表
school_names = response.xpath('//span[@class="item-source"]/a/text()')
# print('school_name',school_name)
school_names = school_names.extract()
items = MyspiderItem()
for title, school_name in zip(titles, school_names):
items['title'] = title
items['school_name'] = school_name
yield items
#返回item对象
# 跟进链接 翻页
next_url = response.xpath('//a[@class="page-next-btn icon-font i-v-right"]/@href').extract()
print(next_url)
if next_url:
yield scrapy.Request(url=next_url[0],callback=self.parse)
#数据写入在pipelines.py中
items.py中的内容:
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class MyspiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
title = scrapy.Field()
school_name = scrapy.Field()
pipelines.py中的内容:
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
class MyspiderPipeline(object):
def process_item(self, item, spider):
'''
这个方法是必须实现的
:param item:
:param spider:
:return:
'''
with open('item.json','a+',encoding='utf-8') as f:
# f.write(json.dumps(item)+'\n')#老写发
f.write(str(item)+'\n')#新写法
return item
#激活才可以写入到文件,激活在settings中的67行