标签:依赖库 window 使用 exp ant 目的 ubantu pip安装 tin
阿里云 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网络框架。它使用非阻塞(也成为异步)代码实现并发。
 # 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)
 # 首先安装依赖库
 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代码的目录.
| 组件 | 解释 | 功能/作用 | 
|---|---|---|
| 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终端访问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()
 # 设置 telnet 的端口
 TELNETCONSOLE_PORT = [6023, 6073]
 # 监听的地址
 TELNETCONSOLE_HOST = ‘127.0.0.1‘
标签:依赖库 window 使用 exp ant 目的 ubantu pip安装 tin
原文地址:https://www.cnblogs.com/yelan5222/p/12080274.html