Scrapy框架爬虫官网的学习
一、安装Scrapy框架
pip install scrapy
二、 创建scrapy框架默认目录
scrapy startproject tutorial
#tutorial为你的项目的名称
该炒作会为您自动创建项目目录
三、项目目录介绍
tutorial/scrapy.cfg # deploy configuration filetutorial/ # project's Python module, you'll import your code from here__init__.pyitems.py # project items definition filemiddlewares.py # project middlewares filepipelines.py # project pipelines filesettings.py # project settings filespiders/ # a directory where you'll later put your spiders__init__.py
四、先从第一只爬虫开始吧
爬虫用来定义爬取网站和相应结果处理是在Spider类定义的初始请求,我们开始第一次爬取数据新建一个文件在 tutorial/spiders
下的quotes_spider.py
import scrapyclass QuotesSpider(scrapy.Spider):#标记爬虫程序,他在项目是唯一的,不同的爬行器用不同的名称name = "quotes"#该方法必须返回一个请求的可迭代数据,爬虫会从第一个数据开始爬取def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse)#在每一个请求成功后处理相应数据的方法Response参数是 TextResponse 它保存页面内容def parse(self, response):page = response.url.split("/")[-2]filename = f'quotes-{page}.html'with open(filename, 'wb') as f:f.write(response.body)self.log(f'Saved file {filename}')
如何运行我们的爬虫代码呢?
跳转到项目顶级目录下运行:
scrapy crawl quotes
#quotes为爬虫文件的名称
代码会生成两个文件,类似于这样:、
这种方式可能不是那么快捷,有些操作是没有必要的,我们可以直接这样写
from pathlib import Pathimport scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"#变量名为start_urls 会默认实现start_requests方法,无需书写该方法start_urls = ["https://quotes.toscrape.com/page/1/","https://quotes.toscrape.com/page/2/",]def parse(self, response):page = response.url.split("/")[-2]filename = f"quotes-{page}.html"with open(filename, 'wb') as f:f.write(response.body)
个人理解就是省却了写一个方法通过命名变量的方式来默认实现 start_urls 方法
五、提取数据
最好的学习方式是使用shell进行学习
在终端上运行:
scrapy shell "http://quotes.toscrape.com/page/1/"
你可以看到这样的结果: