scrapy-redis分布式爬虫的总结,scrapy爬虫部署总结

scrapyd相关介绍

是运行scrapy爬虫的服务程序,它支持以http命令方式发布、删除、启动、停止爬虫程序。而且scrapyd可以同时管理多个爬虫,每个爬虫还可以有多个版本
scrapyd-client
发布爬虫需要使用另一个专用工具,就是将代码打包为EGG文件,其次需要将EGG文件上传到远程主机上这些操作需要scrapyd-client来帮助我们完成

Scrapy构架图
scrapy-redis分布式爬虫的总结,scrapy爬虫部署总结_第1张图片

创建爬虫文件
scrapy startproject jobboleproject

新建爬虫文件
scrapy genspider jobbole jobbole.com

  • init() : 初始化爬虫名字和start_urls列表
  • start_requests() 调用make_requests_from url():生成Requests对象交给Scrapy下载并返回response
  • parse():
    解析response,并返回Item或Requests(需指定回调函数)。

Request先关参数介绍

  • url: 就是需要请求,并进行下一步处理的url
  • callback: 指定该请求返回的Response,由那个函数来处理。
  • method: 请求一般不需要指定,默认GET方法,可设置为"GET", “POST”, "PUT"等,且保证字符串大写
  • headers: 请求头
  • cookies: cookies,模拟用户登录需要指定用户的cookies,字典dict型
  • meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型
  • encoding: 编码类型,使用默认的 ‘utf-8’ 就行。
  • dont_filter: 表明该请求不由调度器过滤。这是当你想使用多次执行相同的请求,忽略重复的过滤器。默认为False。
  • errback: 指定错误处理函数

rules

CrawlSpider使用rules属性来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎,完成后续的爬取工作。
在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。
  1. link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。
  2. callback: 从link_extractor中每获取到链接得到Responses时,会调用参数所指定的值作为回调函数,该回调函数接收一个response作为其一个参数。
  3. follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。如果callback为None,follow 默认设置为True ,否则默认为False。
  4. process_links:指定spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。
  5. process_request:指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None
主要参数
allow:满足括号中“正则表达式”的URL会被提取,如果为空,则全部匹配。
deny:满足括号中“正则表达式”的URL一定不提取(优先级高于allow
allow_domains:会提取的链接的domains。
deny_domains:一定不会被提取链接的domains。
restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。

通常防止爬虫被反主要有以下几个策略:

  • 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)
  • 禁用Cookies(前提是爬取的网站不需要cookies参数)(也就是不启用cookies middleware
  • List item

,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为)

  • 使用cookies池,自定义中间件
  • 除非特殊需要,否则禁用cookies,防止某些网站根据Cookie来封锁爬虫。

RedisSpider类 不需要写start_urls:

  • scrapy-redis 一般直接写allowd_domains来指定需要爬取的域,也可以从在构造方法__init__()里动态定义爬虫爬取域范围(一般不用)。
  • 必须指定redis_key,即启动爬虫的命令,参考格式:redis_key = ‘myspider:start_urls’
  • 根据指定的格式,start_urls将在 Master端的 redis-cli 里 lpush 到 Redis数据库里,RedisSpider 将在数据库里获取start_urls。

执行方式

scrapy runspider myspider_redis.py
或者
scrapy crawl myspider_redis
在Master端的redis-cli输入push指令,参考格式(指定起始url):
lpush myspider:start_urls http://www.dmoz.org/

    • scrapy-redis 一般直接写allowd_domains来指定需要爬取的域,也可以从在构造方法__init__()里动态定义爬虫爬取域范围(一般不用)。
    • 必须指定redis_key,即启动爬虫的命令,参考格式:redis_key = ‘myspider:start_urls’
    • 根据指定的格式,start_urls将在 Master端的 redis-cli 里 lpush 到 Redis数据库里,RedisSpider 将在数据库里获取start_urls。

通过runspider方法执行爬虫的py文件

scrapy runspider myspider_redis.py

或者

scrapy crawl myspider_redis

在Master端的redis-cli输入push指令,参考格式(指定起始url):

lpush myspider:start_urls http://www.dmoz.org/

step3 配置项目运行环境

  • 配置python环境(ubuntu自带python3环境))
  • 安装pip3:sudo apt install python3-pip
  • 安装scrapy:pip3 install scrapy -i https://pypi.douban.com/simple/

如果安装失败添加如下依赖:

sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
  • 安装scrapyd: pip3 install scrapyd
  • 安装scrapyd-client: pip3 install scrapyd-client
  • pip3 install requests
  • pip3 install pymysql
  • pip3 install pymongodb

step4 修改scrapyd的配置文件,允许外网访问

  • 查找配置文件的路径:find -name default_scrapyd.conf

  • 修改配置文件: sudo vim 路径

    step5 要去服务器安全组配置

  • 进入服务安全组选项添加安全组

  • 添加成功后,点击修改规则,添加如下信息(配置目的:允许访问6800端口)

  • 完成后返回到云主机菜单,找到配置安全组菜单,跟换为刚才添加的安全组

  • 最终完成后,在浏览器中输入ip地址和端口,显示如下图,说明配置成功

你可能感兴趣的:(scrapy)