1、在命令行输入 scrapy,可以验证scrapy框架是否安装成功
2、scrapy 内置两种数据提取语法: CSS 和 XPath
3、scrapy shell [url]
提供一个网页的 url,执行命令后,scrapy 会自动去下载这个 url 对应的网页,将结果封装为 scrapy 内部的一个 response 对象并注入到 python shell 中,在这个 response 对象上,可以直接使用 scrapy 内置的css 和 xpath 数据提取器
例子
scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html
(该网址是scrapy官网提供联系的网址)
4、css selector 是 css 的语法来定位标签
5、response.css('div#images a::text').extract()
提取例子网页中 ID 为 images 的 div 下所有 a 标签的文本,
div#images 表示 id 为 images 的 div,如果是类名为 images,这里就是 div.images。div a 表示该 div 下所有 a 标签,::text 表示提取文本,extract 函数执行提取操作,返回一个列表。
要提取所有 a 标签的 href 链接,如下
response.css('div#images a::attr(href)').extract()
不只是 href,任何标签的任意属性都可以用 attr() 提取
6、使用xpath路径提取
表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
例子:
response.xpath('//div[@id="images"]/a/text()').extract()
// 表示当前文本,div[@id="images"] 表示 id 为 images 的 div,通过属性来选择一个标签,要以 tag[@attr="value"] 的方式表示。
7、还有 re() 和 re_first() 方法可以用于 css() 或者 xpath() 方法返回的对象。(使用正则表达式)
例子:
response.css('div#images a::text').re('Name: (.+) ')
re() 方法中定义的正则表达式会作用到每个提取到的文本中,只保留正则表达式中的子模式匹配到的内容,也就是 () 内的匹配内容。
re_first() 方法支持只作用于第一个文本:
8、所有 scrapy 爬虫需要写一个 Spider 类,这个类要继承 scrapy.Spider 类。在这个类中定义要请求的网站和链接、如何从返回的网页提取数据等等。
爬虫标识符号,在 scrapy 项目中可能会有多个爬虫,name 用于标识每个爬虫,不能相同
name = 'shiyanlou-courses'
9、allow_domains 可以是一个列表或字符串,包含这个爬虫可以爬取的域名
例如
allow_domains=['shiyanlou.com']
10、Pipeline 对 Item 进行这几项处理:
验证爬取到的数据 (检查 item 是否有特定的 field)
检查数据是否重复
存储到数据库
11、startproject 命令创建一个 scrapy 项目
scrapy startproject shiyanlou
创建后会建立相应的目录,形成初步框架
自动形成的文件:
items.py 存放数据的容器,
models.py 创建引擎,与数据库连接,形成影射关系,
pipelines.py 对存放的数据进一步加工,如设置格式
settings.py 爬虫的各种设置
middlewares.py 中间件的设置
spiders/***.py 爬虫的主程序,爬取想要的网页
12、在某一个目录下,创建爬虫模板,使用genspider命令
genspider 命令可以快速初始化一个爬虫模版:
scrapy genspider <name> <domain>
name 是爬虫的名称 domain是要爬取的网站
13、runspider 命令用于启动一个独立的 scrapy 爬虫脚本,在 scrapy 项目中启动爬虫使用 crawl 命令,需要指定爬虫的 name:
scrapy crawl courses
14、request 对象是用来让 scrapy 获取页面时用的,response 对象是获取页面后收到的结果。
15、切记,将爬取的数据存入数据库前,要提前在数据中创建对应的数据库和表。
16、使用爬虫,要将数据存入数据库,先配置好环境,检查以下几项是否安装
sudo pip3 install sqlalchemy或 flask-sqlalchemy
sudo apt-get install libmysqlclient-dev
sudo pip3 install mysqlclient
sudo pip3 install scrapy