scrapy反爬机制 与 Selenium搭配

    xiaoxiao2022-07-03  174

    反爬虫机制

    需求背景 网站内容使用js动态加载,一般的爬虫无法抓取 分析目标站点 使用 shell 调试工具动态加载比如请求api得到新数据 向动态请求图片api发起请求json.loads(response.text) 函数来加载处理响应的api数据对象 小计 Spider 到底应该使用 XPath 或 CSS 选择器来提取响应数据,还是使用 JSON,完全取决于目标网站的响应内容scrapy crawl unsplash_image 爬虫启动可以shell界面,response.headers 查看响应体,作对应处理 常规反爬虫 通过 User-Agent 请求头验证是否为浏览器使用 JavaScript 动态加载资源,需要抓取请求api

    反爬虫解决方案

    ip地址验证 思路 不断地随机更换代理服务器的 IP 地址方案 middlewares.py 通过自定义的下载中间件为 Scrapy 设置了代理服务器 需要开发者事先准备好一系列代理服务器 settings.py 文件设置启用自定义的下载中间件 禁用Cookie 场景 有些网站通过跟踪 Cookie 来识别是否是同一个客户端方案 在配置文件中关闭默认开启的cookie选项 COOKIES_ENABLED = False 违反爬虫规则文件 - 有些网站robots.txt 文件,制定了爬虫规则 - 方案 指定不遵守爬虫规则 ROBOTSTXT OBEY = False限制访问频率 场景 当同一个 IP 地址、同一个客户端访问目标网站过于频繁时,很可能会被当成机器为了更好地模拟正常用户的访问速度,可以限制 Scrapy 的访问频率 比如开启频率限制,设置访问开始延迟,访问之间最大延迟,并行每台服务器请求数量,下载后的自动延迟 图形验证码 场景 为了防止机器程序访问,对同客户同ip达到一定访问次数,会要求输入图形验证码解决思路 让机器识别验证码 使用 PIL、Libsvrn 等库自己开发程序来识别图形验证码通过第三方识别。有不少图形验证码的在线识别网站,但识别率高往往需要收费

    Scrapy Selenium整合

    爬取受保护资源 需求场景有些网站必须登录才能获取网络数据
    登录网站常规做法
    直接用爬虫程序向网站的登录处理程序提交帐号参数,记录登录成功后的Cookie数据使用真正的浏览器来模拟登录,然后记录浏览器登录之后的 Cookie 数据

    模拟 VS 使用浏览器信息

    前者需要开发者处理一些复杂行为,自主可控,效率高、灵活性好。缺点依赖编程,若目标强反爬机制,则费时处理。后者简单易用,缺点在于需要启动真实的浏览器,用浏览器加载页面,效率较低
    Selenium
    Web 应用的自动化测试工具(最开始用Java写成的)Selenium 可以驱动浏览器对 Web 应用进行测试爬虫程序正是借助于 Selenium 的这个功能来驱动浏览器登录 Web 应用python程序中使用Selenium库 安装 selenium为 Selenium 下载对应的浏览器驱动安装目标浏览器

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

    最新回复(0)