爬虫框架Scrapy再总结
1.Scrapy框架的安装
2.Scrapy的简单使用
3.Scrapy的整体架构和组成
4.Scrapy的中间件详解
二、Scrapy的简单使用
不管是我们现在所说的Scrapy框架还是其他的爬虫框架都是使爬虫功能模块话,把各种爬虫需求分开来,你只要使用你的项目所需要的模块就够了!
你还需要知道这么几条常用的命令:
创建项目:scrapy startproject xxx
进入项目:cd xxx #进入某个文件夹下
创建爬虫:scrapy genspider xxx(爬虫名) xxx.com (爬取域)
生成文件:scrapy crawl xxx -o xxx.json (生成某种类型的文件)
运行爬虫:scrapy crawl XXX
列出所有爬虫:scrapy list
获得配置信息:scrapy settings [options]
我们来看看Scrapy项目下都有些什么
scrapy.cfg: 项目的配置文件
tutorial/: 该项目的python模块。在此放入代码(核心)
tutorial/items.py: 项目中的item文件.(这是创建容器的地方,爬取的信息分别放到不同容器里)
tutorial/pipelines.py: 项目中的pipelines文件.
tutorial/settings.py: 项目的设置文件.(我用到的设置一下基础参数,比如加个文件头,设置一个编码)
tutorial/spiders/: 放置spider代码的目录. (放爬虫的地方)
容器(items)的定义,容器不一定是一开始全部都定义好的,可以跟随项目的更新一点点向里面添加
import scrapy
class DmozItem(scrapy.Item): #创建一个类,继承scrapy.item类,就是继承人家写好的容器
title = scrapy.Field() # 需要取哪些内容,就创建哪些容器
link = scrapy.Field()
desc = scrapy.Field()
一个简单的爬虫小例子
import scrapy
class DmozSpider(scrapy.Spider): # 继承Spider类
name = "dmoz" # 爬虫的唯一标识,不能重复,启动爬虫的时候要用
allowed_domains = ["dmoz.org"] # 限定域名,只爬取该域名下的网页
start_urls = [ # 开始爬取的链接
"https://www.baidu.com/"
]
def parse(self, response):
filename = response.url.split("/")[-2] # 获取url,用”/”分段,获去倒数第二个字段
with open(filename, 'a') as f:
f.write(response.body) # 把访问的得到的网页源码写入文件
里面的parse方法,这个方法有两个作用:
1.负责解析start_url下载的Response 对象,根据item提取数据(解析item数据的前提是parse里全部requests请求都被加入了爬取队列)
2.如果有新的url则加入爬取队列,负责进一步处理,URL的Request 对象
这两点简单来说就是编写爬虫的主要部分
那么启动爬虫时发生了什么?
Scrapy为Spider的 start_urls 属性中的每个url创建了Request 对象,并将 parse 方法作为回调函数(callback)赋值给了requests,而requests对象经过调度器的调度,执行生成response对象并送回给parse() 方法进行解析,所以请求链接的改变是靠回调函数实现的。
yield scrapy.Request(self.url, callback=self.parse)
|