scrapy框架(二)(未整理完)
分类:
文章
•
2024-07-02 10:07:58
Scrapy shell
- Scrapy shell是用来调试scrapy项目代码的命令行工具
- 启动的时候预定义了scrapy的一些对象
- 作用:调试
设置shell
- scrapy的shell是基于运行环境中的Python解释器shell
- 本质上就是通过命令调用shell,并在启动的时候预定义需要使用的对象
- scrapy允许通过在项目配置文件“scrapy.cfg”中进行配置来制定解释器shell
例如:[settings]
shell = ipython
启动shell
- 启动scrapy shell的命令语法格式如下:
scrapy shell [url|file]
如:scrapy shell hr.tencent.com
- url 就是你想要爬取的网址
- 注意:分析本地文件时一定要带上路径,scrapy shell默认当做url
#如果用scrapy genspider 名 url创建过,scrapy shell 即可,可以不用网址
常用操作方法
- scrapy shell本质上就是个普通的Python shell,只不过提供了一些需要使用的对象,快捷方法便于我们调试
- 快捷方法:
- shelp():帮助查看scrapy shell操作方法的
- req = ‘请求的url’
fetch(req)
- fetch(‘请求的url’) 效果同上两步
- view(response)
- scrapy对象:
- crawler
- spider
- request
- response
- settings
Scrapy选择器
- scrapy提供基于lxml库的解析机制,他们被称为选择器,因为他们“选择”由xpath或css表达式指定的HTML文档的某部分
- scrapy选择器的API非常小,而且非常简单
构造选择器
- scrapy 选择器是通过scrapy.Selector类,通过传递文本或者TextResponse对象构造的实例
- 他会根据输入类型自动选择最佳解析规则XML与HTML
In [3]: from scrapy.selector import Selector
In [4]: from scrapy.http import HtmlResponse
#从文本构造
In [5]: body = “good”
In [6]: select = Selector(text=body)
#从响应构造
In [7]: response = HtmlResponse(url=‘http://example.com’,body=body,encoding=‘utf-8’)
In [8]: select1 = Selector(response=response)
#为了方便,响应对象在selector属性上公开选择器
#在可能的情况下使用此快捷方式完全可以的
In [9]: response.selector.xpath(’//div’)
Out[9]: [ ]
In [10]: print(isinstance(response.selector,Selector))
True
使用选择器
- 选择器提供两个方法俩提取标签
- xpath() 基于xpath的语法规则
- css() 基于css选择器的语法规则
- 快捷方式
- response.xpath()
- response.css()
- 他们返回的选择器列表
- 提取文本:
- selector.extract() 返回文本列表
- selector.extract_first() 返回第一个selector的文本,没有返回None
- 可以设置default
嵌套选择器
- 有时候我们获取标签需要多次调用选择方法(.xpath()或.css())
- response.css(“img”).xpath("@src")
-
selector还有一个.re()方法使用正则表达式提取数据的方法
- 他返回字符串
- 他一般使用在xpath(),css()方法之后,用来过滤文本数据
- re_first()用来返回第一个匹配的字符串如
response.xpath(’//a[contains(@href,“image”)]/text()’).re(r’Name:\s*(.*)’]
scrapy.Spider
运行流程
- 首先生成初始请求以爬取第一个url,并指定要使用从这些请求下载的响应调用的回调函数
- 在回调函数中,解析响应(网页)并返回,item对象,request对象或这些对象的可迭代的dicts
- 在回调函数中,通常使用选择器解析页面内容(但你也可以使用BeautifulSoup,lxml或你喜欢的任何机制)并使用解析的数据生成item
- 最后从spider返回的项目通常会持久保存到数据库(在某些项目管道中)或使用Feed导出写入文件