Python爬虫之scrapy的入门使用
scrapy的入门使用
学习目标:
1 安装scrapy
命令:
sudo apt-get install scrapy
或者:
pip/pip3 install scrapy
2 scrapy项目开发流程
scrapy startproject mySpider
scrapy genspider demo demo.cn
根据网站结构在spider中实现数据采集相关内容
使用pipeline进行数据后续处理和保存
3. 创建项目
通过命令将scrapy项目的的文件生成出来,后续步骤都是在项目文件中进行相关操作,下面以抓取传智师资库来学习scrapy的入门使用:http://www.itcast.cn/channel/teacher.shtml
创建scrapy项目的命令:
scrapy startproject <项目名字>
示例:
scrapy startproject myspider
生成的目录和文件结果如下:
4. 创建爬虫
通过命令创建出爬虫文件,爬虫文件为主要的代码作业文件,通常一个网站的爬取动作都会在爬虫文件中进行编写。
命令:
在项目路径下执行:
scrapy genspider <爬虫名字> <允许爬取的域名>
爬虫名字: 作为爬虫运行时的参数
允许爬取的域名: 为对于爬虫设置的爬取范围,设置之后用于过滤要爬取的url,如果爬取的url与允许的域不通则被过滤掉。
示例:
cd myspider
scrapy genspider demo demo.cn
生成的目录和文件结果如下:
5. 完善爬虫
在上一步生成出来的爬虫文件中编写指定网站的数据采集操作,实现数据提取
5.1 在/myspider/myspider/spiders/Spider.py中修改内容如下:
import scrapy
class Spider(scrapy.Spider): # 继承scrapy.spider
# 爬虫名字
name = ‘demo’
# 允许爬取的范围
allowed_domains = [‘demo.cn’]
# 开始爬取的url地址
start_urls = [‘http://www.demo.cn/channel/teacher.shtml’]
# 数据提取的方法,接受下载中间件传过来的response
def parse(self, response):
# scrapy的response对象可以直接进行xpath
names = response.xpath(‘//div[@class=”tea_con”]//li/div/h3/text()’)
print(names)
# 获取具体数据文本的方式如下
# 分组
li_list = response.xpath(‘//div[@class=”tea_con”]//li’)
for li in li_list:
# 创建一个数据字典
item = {}
# 利用scrapy封装好的xpath选择器定位元素,并通过extract()或extract_first()来获取结果
item[‘name’] = li.xpath(‘.//h3/text()’).extract_first() # 老师的名字
item[‘level’] = li.xpath(‘.//h4/text()’).extract_first() # 老师的级别
item[‘text’] = li.xpath(‘.//p/text()’).extract_first() # 老师的介绍
print(item)
注意:
- scrapy.Spider爬虫类中必须有名为parse的解析
- 如果网站结构层次比较复杂,也可以自定义其他解析函数
- 在解析函数中提取的url地址如果要发送请求,则必须属于allowed_domains范围内,但是start_urls中的url地址不受这个限制,我们会在后续的课程中学习如何在解析函数中构造发送请求
- 启动爬虫的时候注意启动的位置,是在项目路径下启动
- parse()函数中使用yield返回数据,注意:解析函数中的yield能够传递的对象只能是:BaseItem, Request, dict, None
5.2 定位元素以及提取数据、属性值的方法
解析并获取scrapy爬虫中的数据: 利用xpath规则字符串进行定位和提取
5.3 response响应对象的常用属性
- response.url:当前响应的url地址
- response.request.url:当前响应对应的请求的url地址
- response.headers:响应头
- response.requests.headers:当前响应的请求头
- response.body:响应体,也就是html代码,byte类型
- response.status:响应状态码
6 保存数据
利用管道pipeline来处理(保存)数据
6.1 在pipelines.py文件中定义对数据的操作
import json
class DemoPipeline():
# 爬虫文件中提取数据的方法每yield一次item,就会运行一次
# 该方法为固定名称函数
def process_item(self, item, spider):
print(item)
return item
6.2 在settings.py配置启用管道
ITEM_PIPELINES = {
‘myspider.pipelines.DemoPipeline’: 400
}
配置项中键为使用的管道类,管道类使用.进行分割,第一个为项目目录,第二个为文件,第三个为定义的管道类。
配置项中值为管道的使用顺序,设置的数值约小越优先执行,该值一般设置为1000以内。
7. 运行scrapy
命令:在项目目录下执行scrapy crawl <爬虫名字>
示例:scrapy crawl demo
小结
相关文章
- 为什么TensorFlow可以做机器学习开发?
- 记一次beego通过go get命令后找不到bee.exe的坑
- 指定Task任务顺序执行
- CompletionService 使用小结
- Win环境安装Protobuf 2.0 版本
- shell 同时执行多任务下载视频
- Seata 分布式事务解决方案及特点
- zookeeper 使用api 进行节点增删改查及实现简易的配置中心
- 潘石屹首次Python考试成绩 99 分,失分点:画完图后忘了隐藏画笔的箭头
- 啃完Python基础,你要这样做才行
- Python开发者调查显示只有十分之一的人还在用Python 2
- TIOBE 5 月编程语言排行榜:C语言跑到第一,python连续两年上涨
- Python 是前浪,Julia 是后浪?
- 不朽 C++ 为新贵 Python 应用提速 8000 倍!
- 3个Python函数帮程序员们避免编写循环,提高运行速度
- MockMvc模拟对controller进行单元测试
- 工作流一目了然,看小姐姐用动图展示10大Git命令
- 后起之秀!Julia胜于Python的5个优势
- 56岁潘石屹报名全国青少年编程能力等级测试,今陷Python难抽身
- chmod命令详细用法