人生苦短,我用 Pythoncss
前文传送门:html
小白学 Python 爬虫(1):开篇python
小白学 Python 爬虫(2):前置准备(一)基本类库的安装git
小白学 Python 爬虫(3):前置准备(二)Linux基础入门github
小白学 Python 爬虫(4):前置准备(三)Docker基础入门shell
小白学 Python 爬虫(5):前置准备(四)数据库基础数据库
小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装数据结构
小白学 Python 爬虫(10):Session 和 Cookies
小白学 Python 爬虫(11):urllib 基础使用(一)
小白学 Python 爬虫(12):urllib 基础使用(二)
小白学 Python 爬虫(13):urllib 基础使用(三)
小白学 Python 爬虫(14):urllib 基础使用(四)
小白学 Python 爬虫(15):urllib 基础使用(五)
小白学 Python 爬虫(16):urllib 实战之爬取妹子图
小白学 Python 爬虫(17):Requests 基础使用
小白学 Python 爬虫(18):Requests 进阶操做
小白学 Python 爬虫(21):解析库 Beautiful Soup(上)
小白学 Python 爬虫(22):解析库 Beautiful Soup(下)
小白学 Python 爬虫(23):解析库 pyquery 入门
小白学 Python 爬虫(26):为啥买不起上海二手房你都买不起
小白学 Python 爬虫(27):自动化测试框架 Selenium 从入门到放弃(上)
小白学 Python 爬虫(28):自动化测试框架 Selenium 从入门到放弃(下)
小白学 Python 爬虫(29):Selenium 获取某大型电商网站商品信息
小白学 Python 爬虫(31):本身构建一个简单的代理池
小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门
首先恭喜看到这篇文章的各位同窗,从这篇文章开始,整个小白学 Python 爬虫系列进入最后一部分,小编计划是介绍一些经常使用的爬虫框架。
说到爬虫框架,首先绕不过去的必然是 Scrapy 。
Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,能够灵活完成各类需求。
固然第一件事儿仍是各类官方地址:
Scrapy 官网: https://scrapy.org/
Github:https://github.com/scrapy/scrapy
首先看一下 Scrapy 框架的架构体系图:
从这张图中,能够看到 Scrapy 分红了不少个组件,每一个组件的含义以下:
上面这张图的数据流程以下:
这张图的名词有些多,记不住实属正常,不过不要紧,后续小编会配合着示例代码,和各位同窗一块儿慢慢的学习。
先来个最简单的示例项目,在建立项目以前,请肯定本身的环境已经正确安装了 Scrapy ,若是没有安装的同窗能够看下前面的文章,其中有介绍 Scrapy 的安装配置。
首先须要建立一个 Scrapy 的项目,建立项目须要使用命令行,在命令行中输入如下命令:
scrapy startproject first_scrapy
而后一个名为 first_scrapy
的项目就建立成功了,项目文件结构以下:
first_scrapy/ scrapy.cfg # deploy configuration file first_scrapy/ # project's Python module, you'll import your code from here __init__.py items.py # project items definition file middlewares.py # project middlewares file pipelines.py # project pipelines file settings.py # project settings file spiders/ # a directory where you'll later put your spiders __init__.py
到此,咱们已经成功建立了一个 Scrapy 项目,可是这个项目目前是空的,咱们须要再手动添加一只 Spider 。
Scrapy 用它来从网页里抓取内容,并解析抓取的结果。不过这个类必须继承 Scrapy 提供的 Spider 类 scrapy.Spider,还要定义 Spider 的名称和起始请求,以及怎样处理爬取后的结果的方法。
建立 Spider 可使用手动建立,也可使用命令建立,小编这里演示一下如何使用命令来建立,以下:
scrapy genspider quotes quotes.toscrape.com
将会看到在 spider 目录下新增了一个 QuotesSpider.py 的文件,里面的内容以下:
# -*- coding: utf-8 -*- import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' allowed_domains = ['quotes.toscrape.com'] start_urls = ['http://quotes.toscrape.com/'] def parse(self, response): pass
能够看到,这个类里面有三个属性 name
、 allowed_domains
、 start_urls
和一个 parse()
方法。
到这里咱们就清楚了, parse()
方法中的 response 是前面的 start_urls
中连接的爬取结果,因此在 parse()
方法中,咱们能够直接对爬取的结果进行解析。
先看下网页的 DOM 结构:
接下来要作的事情就比较简单了,获取其中的数据,而后将其打印出来。
数据提取的方式能够是 CSS 选择器也能够是 XPath 选择器,小编这里使用的是 CSS 选择器,将咱们刚才的 parse()
方法进行一些简单的改动,以下:
def parse(self, response): quotes = response.css('.quote') for quote in quotes: text = quote.css('.text::text').extract_first() author = quote.css('.author::text').extract_first() tags = quote.css('.tags .tag::text').extract() print("text:", text) print("author:", author) print("tags:", tags)
首先是获取到全部的 class 为 quote 的元素,而后将全部元素进行循环后取出其中的数据,最后对这些数据进行打印。
程序到这里就写完了,那么接下来的问题是,咱们如何运行这只爬虫?
Scrapy 的运行方式一样适用适用命令行的,首先要到这个项目的根目录下,而后执行如下代码:
scrapy crawl quotes
结果以下:
能够看到,咱们刚才 print()
的内容正常的打印在了命令行中。
除了咱们 print()
中的内容的打印,还能够看到在 Scrapy 启动的过程当中, Scrapy 输出了当前的版本号以及正在启动的项目名称,而且在爬取网页的过程当中,首先访问了 http://quotes.toscrape.com/robots.txt 机器人协议,虽然这个协议在当前这个示例中响应了 404的状态码,可是 Scrapy 会根据机器人协议中的内容进行爬取。
本系列的全部代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便你们取用。
https://docs.scrapy.org/en/latest/intro/tutorial.html
https://docs.scrapy.org/en/latest/topics/architecture.html
https://cuiqingcai.com/8337.html
原文出处:https://www.cnblogs.com/babycomeon/p/12159528.html