'''标签:en,简介,html,scrapy,引擎,https,下载 From: https://www.cnblogs.com/longwanghzx/p/16595359.html
scrapy简介
Scrapy是由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,
用于抓取 web站点并从页面中提取结构化的数据,只需要实现少量的代码,
就能够快速的抓取。Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度
twisted下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/
pip install twisted
下载完以后,就可以下载scrapy
pip install scrapy
切换盘 f: 回车(进到F盘)
cd+文件名(进入文件)
创建项目 scrapy startproject (自己取文件名)
# 常亮 (小写为变量名,大写为常亮) 不能修改爬取
LKSJJFLK_jksdj = 'zhangsan'
# Obey robots.txt rules
# 爬虫不需要遵守,必须该为False 才能爬起
ROBOTSTXT_OBEY = False
# 在终端打印运行的结果
scrapy crawl fz
# 在settings里面输入LOG_LEVEL = 'ERROR' 就只会打印报错信息,
# 不写就把每天操作的日志打印出来
# 只打印报错的信息
LOG_LEVEL = 'ERROR'
ITEM_PIPELINES = {
# 数值越小,优先级越高
'myspider.pipelines.MyspiderPipeline': 300,
}
'''
'''
scrapy框架流程
1 引擎:Hi!Spider, 你要处理哪一个网站?
2 Spider:老大要我处理xxxx.com。
3 引擎:你把第一个需要处理的URL给我吧。
4 Spider:给你,第一个URL是xxxxxxx.com。
5 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
6 调度器:好的,正在处理你等一下。
7 引擎:Hi!调度器,把你处理好的request请求给我。
8 调度器:给你,这是我处理好的request
9 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求
10 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)
11 引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)
12 Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。
13 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。
14 管道调度器:好的,现在就做!
Scrapy engine(引擎) 总指挥:负责数据和信号的在不同 scrapy已经实现
模块间的传递
Scheduler (调度器) 一个队列,存放引擎发过来的 scrapy已经实现
request请求,并返回给引擎
Downloader(下载器) 下载把引擎发过来的requests请求 scrapy已经实现
并返回给引擎
Spider(爬虫) 处理引擎发出来的response,提取 需要手写
数据,提取url,并交给引擎
Item Pipline(管道) 处理引擎传过来的数据,比如储存 需要手写
Downloader
Middlewares(下载中间件) 可以自定义的下载扩展,比如设置代理 一般不用手写
Spider Middlewares(中间件) 可以自定义requests请求和进行 一般不手写
response过滤
'''
'''
scrapy shell:
pip install ipython
Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码。
其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码。
使用方法
scrapy shell www.baidu.co
- response.url:当前响应的URL地址
- respons.request.url:当前响应的请求URL地址
- response.headers:响应头信息
- response.body:响应体,也就是HTML代码
- response.request.headers:当前响应的请求头
- response.xpath():测试xpath
## 豆瓣电影实战
'''
'''
1,创建项目
scrapy startproject 项目名称
2,进入项目
cd 项目名称
3,创建爬虫 (scrapy genspider fz chii.in)
scrapy genspider 爬虫名字 域名(www.xxx.com)
# 1、创建一个项目
scrapy startproject myspider
# 2、生成一个爬虫,demo为爬虫名
scrapy genspider demo "demo.cn"
# 3、提取数据完善spider 使用xpath,css等
# 4、保存数据pipeline中保存数据
# 5、执行爬虫, name就是爬虫的名字
scrapy crawl name
'''
'''
1, 基于终端命令的持久化存储
指令:scrapy crawl 爬虫 -o filename(文件名)
只能将parse方法的返回值存储到本地,支持的文件类型有限
2, 基于管道的持久化存储
2,
'''
'''
创建的spider:
import scrapy
class DbSpider(scrapy.Spider):
name = 'db'
allowed_domains = ['douban.com'] # 允许爬取的域名
start_urls = ['http://douban.com/'] # 抓取的目标URL
def parse(self, response):
# pass
'''
'''
# Scrapy settings for maoyan project#
# For simplicity, this file contains only settings considered important or# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/latest/topics/settings.html
# https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#
#Scrapy项目的名字,这将用来构造默认 User-AgentBOT_NAME = 'BLZX'SPIDER_MODULES = ['BLZX.spiders'] # Scrapy搜索spider的模块列表 默认: [xxx.spiders]NEWSPIDER_MODULE = 'BLZX.spiders'
# 使用 genspider 命令创建新spider的模块。默认: 'xxx.spiders'
# 通过在用户代理上标识您自己(和您的网站)来负责地爬行
# Crawl responsibly by identifying yourself (and your website) on the user-agent#USER_AGENT = 'maoyan (+http://www.yourdomain.com)'
# Obey robots.txt rules 遵守robots.txt规则
ROBOTSTXT_OBEY = False
# 配置Scrapy执行的最大并发请求(默认值:16)
# Configure maximum concurrent requests performed by Scrapy (default: 16)#CONCURRENT_REQUESTS = 32
# 同一网站的请求配置延迟(默认值:0)# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay# See also autothrottle settings and docs
# 下载延迟#DOWNLOAD_DELAY = 3
# 下载延迟设置将仅满足以下条件之一(二选一)
# The download delay setting will honor only one of:#CONCURRENT_REQUESTS_PER_DOMAIN = 16
# 每个域的并发请求的最大值#CONCURRENT_REQUESTS_PER_IP = 16
# 对单个IP进行并发请求的最大值
# 禁用cookie(默认情况下启用)
# Disable cookies (enabled by default)#COOKIES_ENABLED = False
# 禁用telnet控制台(默认启用)
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False# 覆盖默认请求头
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# 启用或禁用蜘蛛中间件
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
# 'maoyan.middlewares.MaoyanSpiderMiddleware': 543,
#}
# 启用或禁用下载器中间件
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
# 'maoyan.middlewares.MaoyanDownloaderMiddleware': 543,
# }
# 启用或禁用扩展
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# 管道配置项目
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
# 'maoyan.pipelines.MaoyanPipeline': 300,
#}
# 启用和配置AutoThrottle扩展(默认情况下禁用)
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# 初始下载延迟
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# 在高延迟情况下设置的最大下载延迟
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# Scrapy平均请求数应与每个远程服务器并行发送
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# 启用和配置HTTP缓存(默认情况下禁用)
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
'''