上个博客写了: Scrapy的概念以及Scrapy的详细工作流程 Scrapy框架的学习(1.scrapy的概念以及scrapy的工作流程)_还是那个同伟伟的博客-优快云博客
1.scrapy的安装 pip install scrapy
2.创建Scarpy项目:
在cmd中进入到想要创建Scrapy项目的路径下(最好在已经创建好的pycharm的工程路径下,就不用导入Python编译器等): 输入命令创建:scrapy startproject scrapy的项目名称
创建之后,可以在pycharm中查看已经创建了什么,一个
items.py 可以预先定义好爬取那些字段
middlewares.py : 中间键
pipelines.py: 管道 , 进行数据的处理以及保存
settings.py : 整个项目的设置
spiders文件夹; 创建好的爬虫,创建好是空的
3.生成一个爬虫
首先cd 创建的scrapy的项目名
然后 scrapy genspider 爬虫名 域名(即爬取的范围)
然后进入到pycharm中查看生成的东西:
4.然后就可以写爬虫了, 这是一个专门测试scrapy的爬虫网站 :Quotes to Scrape 里面是一些名言名句
在刚才创建好的爬虫名字的py文件里面写。
# -*- coding: utf-8 -*- import scrapy class ScrapetestSpider(scrapy.Spider): name = 'scrapeTest' # 爬虫名 '''允许爬取的范围''' allowed_domains = ['quotes.toscrape.com'] '''最开始请求的url地址''' start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): """处理start_url地址对应的响应""" # 爬取页面上的名言 ret1 = response.xpath("//span[@class='text']//text()") print(ret1)
然后打印出这个名言,
5. 启动爬虫的框架:
首先cmd中进入到你刚才创建的项目路径下。
输入命令: scrapy crawl 爬虫名
(1)会打印出很多的东西,包括日志等等,
(2)看着有点乱,我们可以在settings.py加入下面设置
LOG_LEVEL = "WARNING"
然后在执行命令就可以了 : scrapy crawl 爬虫名
可以看到爬取的数据都在一个列表当中,列表当中的每个元素是一个Selector对象,
(3). 直接取出当中的数据 extract()方法,可以在代码中这样写
ret1 = response.xpath("//span[@class='text']//text()").extract()
然后在执行启动框架,运行命令,可以看到数据就取出来了
有关取值:
当使用extrat_first()的时候,如果xpath写错的话,取值的会是一个空值,None
6. pipelines管道的使用,
首先要在pipelines里面开启 ,在settings.py里面把这个注释去掉就行
是一个字典, 键代表位置,值代表距离引擎的远近,即权重
对值的解释: 我们可以定义多个pipeline,数据会先进行一个pipeline再进行一个pipeline,进入的pipeline的先后顺序就可以通过值来指定。值越小会先执行
爬虫名字.py:
# -*- coding: utf-8 -*- import scrapy class ScrapetestSpider(scrapy.Spider): name = 'scrapeTest' # 爬虫名 '''允许爬取的范围''' allowed_domains = ['quotes.toscrape.com'] '''最开始请求的url地址''' start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): """处理start_url地址对应的响应""" # 爬取页面上的名言 text = response.xpath("//span[@class='text']//text()").extract() # 爬取页面上的作者 aut = response.xpath("//small[@class='author']//text()").extract() for li in range(len(text)): item = {} item["author"] = aut[li] item["text"] = text[li] yield item
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): with open("text.txt",'a') as f: f.write(json.dumps(item,ensure_ascii=False)+"\n") return item print("保存数据成功")
然后开启框架,查看保存的数据text.txt