Scrapy框架(一)
Scrapy框架(一)
国内镜像源:
阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.doubanio.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
简介:
requests 虽然优雅强大,但它不是并发的,requests.get()处于阻塞状态,等待响应数据接受完成;如果要实现多线程,需要我们手动写多线程。
scrapy框架自带并发(默认16个线程) 去重 调度;Scrapy使用了Twisted 异步网络库来处理网络通讯。
scrapy框架 是用Twisted编写的,Twisted是一个流行的事件驱动的Python网络框架。它使用非阻塞(也成为异步)代码实现并发。
安装
windows安装
# cmd命令
pip install scrapy -i https://pypi.doubanio.com/simple
python -m pip install scrapy # 如果报错用这个
如果失败(是因为scrapy是依赖Twisted的,而twisted需要c++的环境):
在 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载跟你python版本对应的版本,然后
cd D:\QMDownload # cd到你刚才下载的文件的路径,再用下面命令安装 Twisted的文件
pip install Twisted-19.7.0-cp36-cp36m-win_amd64.whl
.assets/1571662269801.png?lastModify=1577005237)
Ubantu安装:
# 首先安装依赖库
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
# 如果你想在python3上安装scrapy,你还需要Python3的开发头文件:
sudo apt-get install python3-dev
# 最后在virtualenv中,你可以使用pip安装Scrapy
pip install scrapy[==1.6.0] -i https://pypi.tuna.tsinghua.edu.cn/simple # 清华源
基本使用
单个文件方式运行
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : demo.py
import os
import scrapy
class MySpider(scrapy.Spider):
name = 'spider1' # 爬虫名
# 初始化地址, 不会考虑域名范围的
start_urls = ['https://httpbin.org/get'] # 启动时Request会自动第一个访问该url
def parse(self, response):
"""处理response对象的方法"""
print(response.text, '======demo演示=====')
# 运行:
cd 到该文件所在路径
scrapy runspider demo.py # 其实命令运行还是调用了框架的依赖(调度器)
项目方式
创建项目
$ scrapy startproject project_name
$ tree
> dir # 同linux的 ls 查看当前路径下文件
创建爬虫文件
$ cd project_name
$ scrapy genspider spider_name website_domain
运行爬虫
$ scrapy crawl spider_name # 运行爬虫项目;在项目根目录下运行(即配置文件所在路径)
$ scrapy runspider spider_file # 运行爬虫文件; 要在爬虫文件所在的路径下运行该命令
查看其他:
$ scrapy list
# 查看可以使用的template
scrapy genspider -l
# 查看template 的内容
scrapy genspider -d basic
# 检查spider
scrapy check -l
scrapy check
# 查看页面返回结果
scrapy fetch --nolog --headers https://www.danke.com/room/bj
# 用浏览器打开页面
scrapy view https://www.danke.com/room/bj
# 命令行执行scrapy
scrapy shell https://www.danke.com/room/bj
# 对url进行分析
scrapy parse <url> [options]
目录介绍
scrapy.cfg: 项目的配置文件myscrapy:项目myscrapy/items.py:项目使用的item文件myscrapy/pipelines.py: 项目中的pipelines文件.myscrapy/settings.py: 项目的设置文件.myscrapy/spiders/: 放置spider代码的目录.
scrapy 组件
| 组件 | 解释 | 功能/作用 |
|---|---|---|
| Spiders | 爬虫程序 | 处理response对象,解析响应、提取需要的数据;并将需要跟进的URL提交给引擎 |
| Engine | 引擎 | 负责不同组件之间的通信、数据传递 |
| Scheduler | 调度器 | 接收Request请求,整理排队,加入队列 |
| Downloader | 下载器 | 负责引擎发送过来的Request请求 获取web页面的数据,进行下载 |
| Item pipelines | 管道 | 负责spiders返回的数据,对其处理;进行持久化存储(写入本地or数据库) |
| SpiderMiddleware | 爬虫中间件 | 爬虫中间件是位于引擎和爬虫之间的特定的钩子,能够处理传入的响应和传递出去的item和请求。 |
| DownloaderMiddleware | 下载中间件 | 下载中间件是位于引擎和下载器之间的特定的钩子,它们处理从引擎传递到下载器的请求,以及下载器传递到引擎的响应。 |
运行流程
.assets/1571713671253.png?lastModify=1577005237)
数据流
上图显示了Scrapy框架的体系结构及其组件,以及系统内部发生的数据流(由红色的箭头显示。)
Scrapy中的数据流由执行引擎控制,流程如下:
1.首先从爬虫获取初始的请求交给引擎
2.将请求放入调度模块,然后获取下一个需要爬取的请求
3.调度模块返回下一个需要爬取的请求给引擎
4.引擎将请求发送给下载器,依次穿过所有的下载中间件
5.一旦页面下载完成,下载器会返回一个响应包含了页面数据,然后再依次穿过所有的下载中间件。
6.引擎从下载器接收到响应,然后发送给爬虫进行解析,依次穿过所有的爬虫中间件
7.爬虫处理接收到的响应,然后解析出item和生成新的请求,并发送给引擎
8.引擎将已经处理好的item发送给管道组件,将生成好的新的请求发送给调度模块,并请求下一个请求
9.该过程重复,直到调度程序不再有请求为止。
Telent
使用telent终端访问scrapy
# 默认监听本地的6023端口
telnet localhost 6023
| 快捷名称 | 描述 |
|---|---|
crawler() |
Scrapy Crawler (scrapy.crawler.Crawler 对象) |
engine() |
Crawler.engine属性 |
spider() |
当前激活的爬虫(spider) |
slot() |
the engine slot |
extensions() |
扩展管理器(manager) (Crawler.extensions属性) |
stats() |
状态收集器 (Crawler.stats属性) |
settings() |
Scrapy设置(setting)对象 (Crawler.settings属性) |
est() |
打印引擎状态的报告 |
prefs() |
针对内存调试 (参考 调试内存溢出) |
p() |
pprint.pprint 函数的简写 |
hpy() |
针对内存调试 |
# 暂停爬虫
telnet localhost 6023
>>> engine.pause()
# 恢复爬虫
>>> engine.unpause()
# 停止爬虫
>>> engine.stop()
Setting 配置
# 设置 telnet 的端口
TELNETCONSOLE_PORT = [6023, 6073]
# 监听的地址
TELNETCONSOLE_HOST = '127.0.0.1'
Scrapy框架(一)的更多相关文章
- Python爬虫Scrapy框架入门(2)
本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...
- Python爬虫Scrapy框架入门(1)
也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...
- Scrapy框架使用—quotesbot 项目(学习记录一)
一.Scrapy框架的安装及相关理论知识的学习可以参考:http://www.yiibai.com/scrapy/scrapy_environment.html 二.重点记录我学习使用scrapy框架 ...
- Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解
这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...
- Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理
这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...
- python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)
操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...
- 一个scrapy框架的爬虫(爬取京东图书)
我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...
- 安装scrapy框架的常见问题及其解决方法
下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...
- 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案
Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...
- 利用scrapy框架进行爬虫
今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...
随机推荐
- fastjson 1.2.24-基于JdbcRowSetImpl的PoC构造与分析
前言: 基于fastjson的第一种payload是基于templatesImpl的方式,但是这种方式要求Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,是 ...
- CentOS 7 Cobbler 配置 YUM仓库
通过Cobbler配置内网YUM仓库 在上一篇Cobbler 安装中,配置好了Cobbler 下面来通过Cobbler来配置内网的YUM仓库 这里可以同步所有版本的yum源,增加内网的yum安装下载速 ...
- org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'ExtractAbstractServiceHandler' is defined
在利用 Spring 集成 thrift 时,报错如下: javax.servlet.ServletException: Servlet.init() for servlet search-nlp-s ...
- pip-get.py安装问题
问题: 安装完成和配置环境之后:输入一个测试命令:pip help 出现下面这个问题. Fatal error in launcher: Unable to create process using ...
- AI Boot Camp 分享之 ML.NET 机器学习指南
今天在中国七城联动,全球134场的AI BootCamp胜利落幕,广州由卢建晖老师组织,我参与分享了一个主题<ML.NET 机器学习指南和Azure Kinect .NET SDK概要>, ...
- 支付宝支付功能(使用支付宝sdk)
1.准备参数 新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取) public class NewAlipayconfi ...
- PyCharm设置Python版本,你肯定不知道!
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:智小星 PyCharm默认会使用虚拟的Python解释器,即使 ...
- 使用RSA加密方式加密文件
链接:GITHUB 使用RSA对流进行加密并保存到文件中 缺点:速度非常的慢,加密大文件就等着吧 环境 VS2017 + C# 7.0 + .net framwork 4.7.2
- leetcode -- 寻找两个有序数组的中位数
题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nu ...
- Happy Birthday! 今天我 1 周岁生日啦!
2018.09.28,我第 1 天分享文章. 2019.09.28,我连续分享的第 365 天. 今天我 1 周岁啦! 生日意味着一个新的开端, 意味着重新把握生活的机会. 新的一岁,从新头像开始 愿 ...