一 介绍 一些网站会在正常的账号密码认证之外加一些验证码,以此来明确地区分人/机行为,从一定程度上达到反爬的效果,对于简单的校验码Tesserocr就可以搞定,如下 但一些网站加入了滑动验证码,最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/,下图是极验的登录界面 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家企业正在使用极验,每天服务响应超过四亿次,广泛应用于直播视频、金融服务、电子商务、游戏娱乐、政府企业等各大类型网站 对于这类验证,如果我们直接模拟表单请求,繁琐的认证参数与认证流程会让你蛋碎一地,我们可以用selenium驱动浏览器来解决这个问题,大致分为以下几个步骤 123456789101112131415#步骤一:点击按钮,弹出没有缺口的图片#步骤二:获取步骤一的图片#步骤三:点击滑动按钮,弹出带缺口的图片#步骤四:获取带缺口的图片#步骤五:对比两张图片的所有RBG像素点,得到不一样像素点的x值,即要移动的距离#步骤六:模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段 ...
一 介绍 原来scrapy的Scheduler维护的是本机的任务队列(存放Request对象及其回调函数等信息)+本机的去重队列(存放访问过的url地址) 所以实现分布式爬取的关键就是,找一台专门的主机上运行一个共享的队列比如Redis, 然后重写Scrapy的Scheduler,让新的Scheduler到共享队列存取Request,并且去除重复的Request请求,所以总结下来,实现分布式的关键就是三点: 123##1、共享队列##2、重写Scheduler,让其无论是去重还是任务都去访问共享队列##3、为Scheduler定制去重规则(利用redis的集合类型) 以上三点便是scrapy-redis组件的核心功能 12345##安装:pip3 install scrapy-redis##源码:D:\python3.6\Lib\site-packages\scrapy_redis 二 scrapy-redis组件 1、只使用scrapy-redis的去重功能 使用共享去重队列+源码分析 1234567891011121314151617181920212223242526272 ...
一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下 The data flow in Scrapy is controlled by the execution engine, and goes like this: The Engine gets the initial Requests to crawl from the Spider. The Engine schedules the Requests in the Scheduler and asks for the next Re ...
一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低。 需要强调的是:对于单线程下串行N个任务,并不完全等同于低效,如果这N个任务都是纯计算的任务,那么该线程对cpu的利用率仍然会很高,之所以单线程下串行多个爬虫任务低效,是因为爬虫任务是明显的IO密集型程序。 关于IO模型详见链接:http://www.cnblogs.com/linhaifeng/articles/7454717.html 那么该如何提高爬取性能呢?且看下述概念 二 同步、异步、回调机制 1、同步调用:即提交一个任务后就在原地等待任务结束,等到拿到任务的结果后再继续下一行代码,效率低下 123456789101112131415import requestsdef parse_page(res): print('解析 %s' %(len(res)))def get_page(url): print('下载 %s' %url) re ...
Python
未读paramiko 一 介绍 12## 用于帮助开发者通过代码远程连接服务器,并对服务器进行操作。## pip3 install paramiko 二 通过用户名密码方式远程执行命令 12345678910111213141516171819import paramiko## 创建SSH对象ssh = paramiko.SSHClient()## 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())## 连接服务器ssh.connect(hostname='192.168.16.85', port=22, username='root', password='123456')## 执行命令stdin, stdout, stderr = ssh.exec_command('df')## 获取命令结果result = stdout.read()## 关闭连接ssh.close()print(result.d ...
Python
未读安装 1pip3 install pymysql 一 链接、执行sql、关闭(游标) 123456789101112131415161718192021222324import pymysqluser=input('用户名: ').strip()pwd=input('密码: ').strip()##链接conn=pymysql.connect(host='localhost',user='root',password='123',database='egon',charset='utf8')##游标cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示##cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)##执行sql语句sql='select * from userinfo where name="%s" and password=& ...
Python
未读b287d1b6e0bad61174d643199e7e340519a5ff6f3823822d82f8204f2dd22dcf75b6407adea6c9d9cc3ff389a6cb4796d77d962554297568dd336151faec49a9ebbdc334a6c4e91773e3220f4b528af4bd601bff42ae9637cff7c3b20e3978068ed5a60431d61370afb0bae3f228661303436f83e1c1887b187378a5fcef2783f031ce6c6f29b2bf8e9458256cf39b12d4acdb8742fea244ada11c8dfee96cf8f9a8bc59c9e393bd59dea51356c719be000ed190af83be8cce57f0c026d913e8b59a506750dad1e2065a8d7a486c39641f5fe1e99d8c781e45f9cc8e19bffe168596fb33e4ca492089952e4db116ef8e1b92895fbcc6c64de ...
##Beautifulsoup模块 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.你可能在寻找 Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发,官网推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4 12345678910111213141516171819#安装 Beautiful Souppip install beautifulsoup4#安装解析器Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .根据操作系统不同,可以选择下列方法来安装lxml:$ apt-get install Python-lxml$ easy_install lxml$ pip install lxml另一个可供选择的解析器是纯Python实现的 html5lib , html5lib的解析方 ...
Python HTTP库之requests模块 一、介绍 requests 是一个用于发送 HTTP 请求的 Python 库,其 API 比较简洁,使用起来比 urllib 更加便捷(本质是封装了 urllib3)。 注意事项 requests 库发送请求将网页内容下载下来以后,并不会执行 JavaScript 代码,这需要我们自己分析目标站点然后发起新的请求。 在正式学习 requests 前,建议先熟悉 HTTP 协议 安装 1pip3 install requests 常见请求方式 GET 和 POST 是最常用的请求方式。 其他请求方式包括 PUT, DELETE, HEAD, OPTIONS。 12345678910111213141516171819import requests# GET 请求r = requests.get('https://api.github.com/events')# POST 请求r = requests.post('http://httpbin.org/post', data={ ...