scrapy反爬机制 与 Selenium搭配

27 篇文章 0 订阅
25 篇文章 0 订阅

反爬虫机制

  • 需求背景
    • 网站内容使用js动态加载,一般的爬虫无法抓取
  • 分析目标站点
    • 使用 shell 调试工具
    • 动态加载比如请求api得到新数据
      1. 向动态请求图片api发起请求
      2. json.loads(response.text) 函数来加载处理响应的api数据对象
  • 小计
    • Spider 到底应该使用 XPath 或 CSS 选择器来提取响应数据,还是使用 JSON,完全取决于目标网站的响应内容
    • scrapy crawl unsplash_image 爬虫启动
    • 可以shell界面,response.headers 查看响应体,作对应处理
  • 常规反爬虫
    • 通过 User-Agent 请求头验证是否为浏览器
    • 使用 JavaScript 动态加载资源,需要抓取请求api
反爬虫解决方案
  • ip地址验证
    • 思路 不断地随机更换代理服务器的 IP 地址
    • 方案
      1. middlewares.py 通过自定义的下载中间件为 Scrapy 设置了代理服务器
        • 需要开发者事先准备好一系列代理服务器
      2. settings.py 文件设置启用自定义的下载中间件
  • 禁用Cookie
    • 场景 有些网站通过跟踪 Cookie 来识别是否是同一个客户端
    • 方案
      • 在配置文件中关闭默认开启的cookie选项 COOKIES_ENABLED = False
  • 违反爬虫规则文件
    - 有些网站robots.txt 文件,制定了爬虫规则
    - 方案 指定不遵守爬虫规则 ROBOTSTXT OBEY = False
  • 限制访问频率
    • 场景
      • 当同一个 IP 地址、同一个客户端访问目标网站过于频繁时,很可能会被当成机器
      • 为了更好地模拟正常用户的访问速度,可以限制 Scrapy 的访问频率
        • 比如开启频率限制,设置访问开始延迟,访问之间最大延迟,并行每台服务器请求数量,下载后的自动延迟
  • 图形验证码
    • 场景 为了防止机器程序访问,对同客户同ip达到一定访问次数,会要求输入图形验证码
    • 解决思路 让机器识别验证码
      1. 使用 PIL、Libsvrn 等库自己开发程序来识别图形验证码
      2. 通过第三方识别。有不少图形验证码的在线识别网站,但识别率高往往需要收费

Scrapy Selenium整合

  • 爬取受保护资源
    • 需求场景
    • 有些网站必须登录才能获取网络数据
登录网站常规做法
  • 直接用爬虫程序向网站的登录处理程序提交帐号参数,记录登录成功后的Cookie数据
  • 使用真正的浏览器来模拟登录,然后记录浏览器登录之后的 Cookie 数据
模拟 VS 使用浏览器信息
  • 前者需要开发者处理一些复杂行为,自主可控,效率高、灵活性好。缺点依赖编程,若目标强反爬机制,则费时处理。
  • 后者简单易用,缺点在于需要启动真实的浏览器,用浏览器加载页面,效率较低
Selenium
  • Web 应用的自动化测试工具(最开始用Java写成的)
  • Selenium 可以驱动浏览器对 Web 应用进行测试
  • 爬虫程序正是借助于 Selenium 的这个功能来驱动浏览器登录 Web 应用
  • python程序中使用Selenium库
    1. 安装 selenium
    2. 为 Selenium 下载对应的浏览器驱动
    3. 安装目标浏览器

总之,没有爬不到的数据,只要技术足够。爬与反爬虫互为矛盾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值