一、Scrapy 命令行详解
1.创建项目
命令行运行
scrapy startproject quotetutorial E:\scrapy_demo
在 E:\scrapy_demo
目录创建项目 quotetutorial
。然后进到项目中,即有 scrapy.cfg 文件的目录:
cd /d E:\scrapy_demo\quotetutorial
-- quotetutorial
-- scrapy.cfg #指定 settings 路径,deploy 部署相关配置。
-- quotetutorial
-- items.py #保存数据的数据结构
-- middlewares.py #爬取过程中定义的中间件,可以处理requests,response,等等操作,可以改一下相关配置。
-- pipelines.py #输出
-- settings.py #定义配置信息,
-- spiders
--quotes.py #
2.生成 Spider
2.1 创建 spider 。 先输入 spider 名称 (quotes),再输入域名。爬虫名称不能与项目同名。
scrapy genspider quotes quotes.toscrape.com
2.2 列出创建spider所有可用模板
scrapy genspider -l
指定模板生成spider,此命令生成的 spider 多了一些配置。
scrapy genspider -t crawl quotes quotes.toscrape.com
3.运行项目
scrapy crawl quotes
爬取结果输出到指定文件:
scrapy crawl quotes -o quotes.json # -o 指定输出文件格式。保存成json数据。json格式:用大括号括起来,以字典形式存在
scrapy crawl quotes -o quotes.jl #
scrapy crawl quotes -o quotes.csv
scrapy crawl quotes -o quotes.xml
scrapy crawl quotes -o quotes.pickle
scrapy crawl quotes -o quotes.marshal
scrapy crawl quotes -o ftp://user:pass@ftp.example.com/path/quotes.csv #远程ftp保存。后接网址,路径
4.检查代码是否出错
scrapy check
5.返回所有 spider 名称
scrapy list
更多请求
scrapy shell quotes.toscrape.com #进入命令行交互模式
response
quotes = response.css('.quote')
quotes
quotes[0]
quotes[0].css('.text')
quotes[0].css('.text::text')
quotes[0].css('.text::text').extract()
quotes[0].css('.text').extract()
quotes[0].css('.text::text').extract_first()
二、Scrapy 中选择器用法
1.使用选择器
实例:命令行打开
scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html
1.1
输入response.selector
,selector 是scrapy内置选择器类。
response.selector.xpath('//title/text()') #返回selector对象的list
response.selector.xpath('//title/text()').extract_first() #xpath 选择器。输出文本内容的第一个元素
response.selector.css('title::text').extract_first(default='') #selector 可省略,上同。 当选择器查找不到内容时,返回default属性指定内容
1.2 属性
response.css('a::attr(href)') #选取属性加 双冒号 加 attr 。
response.css('a::attr(href)').extract() #获取属性值 。extract()方法是把selector 变成数据。
1.3 文本
response.css('a::text') #选取文本所有信息
response.xpath('//a/text()').extract() ##选取文本
1.4 查找属性值包含 image 的所有超链接
response.xpath('//a[contains(@href, "image")]/@href') 利用contains
response.xpath('//a[contains(@href, "image")]/@href').extract()
response.css('a[href*=image]::attr(href)')
response.css('a[href*=image]::attr(href)').extract()
1.5 选择所有的 a 标签的 image 里面的 src 属性值
response.xpath('//a[contains(@href, "image")]/img/@src').extract()
response.css('a[href*=image] img::attr(src)').extract() #css选择器不支持双斜杠
1.6 正则表达式的匹配
response.css('a::text').re('Name\:(.*)') #a标签里面的name 冒号后面的值
response.css('a::text').re_first('Name\:(.*)') #取出第一个
response.css('a::text').re_first('Name\:(.*)').strip() #strip()方法去掉空格
更多详细内容
三、 Scrapy 中 spiders 的用法
Link
Link
spider 完成爬虫逻辑和网页数据解析
四、Scrapy 中 Item Pipeline 用法
项目管道。抓取到item 后,需要在 Item Pipeline 对 item 进行进一步处理。
Link
项目管道的典型用途是:
- 清理HTML数据
- 验证爬取的数据(检查item包含某些字段)
- 检查重复项(并删除它们)
- 将爬取结果保存到数据库中
五、 Scrapy 中 Download Middleware 用法
下载中间件,可以用来改写请求或者出现异常的时候处理异常,另外,还提供其他的功能。
Link
欢迎关注我的公众号:「韧桂」
韧桂 2019-03-02