Spider-three
一、selenium
from selenium import webdriver
driver = webdriver.Chrome() # 创建一个chrome浏览器控制对象
#driver = webdriver.PhantomJS() # 创建一个phantomjs无界面浏览器
driver.get("http://www.baidu.com/") # 使用浏览器发送请求
html = driver.page_source # 获取网页的源代码(已经渲染完成的源代码)
driver.save_screenshot("test.png") # 将网页保存为图片
driver.quit() # 关闭浏览器
html_obj = etree.HTML(html)
# 32 位: 最大的内存寻址范围是 2 的 32次方
# 64 位: 最大的内存寻址范围是 2 的 64次方
ChromeDriver的作用是:可以调用电脑上的真实Chrome浏览器。
Chrome默认是有界面的浏览器,所以支持复杂的鼠标和键盘事件(比PhantomJS更方便)
Chrome也支持无界面(headless)模式:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
# 无界面模式(更节约资源)
driver = webdriver.Chrome(chrome_options=options)
# 有界面模式(支持复杂的鼠标键盘事件)
driver = webdriver.Chrome()
# 获取渲染后的网页源码,可以通过xpath提取数据
html = driver.page_source
Python第三方模块安装方式:
1. 在线安装: pip install xxxx
2. 离线包安装: pip install xxxx_1.23.whl
3. 源码安装: python setup.py install
第三方库fake_useragnet 随机生成User-Angent : "https://pypi.org/project/fake-useragent/"
注意: 第一次随机生成浏览器user_agent信息时, 如果出现报错, 是因为第一次获取时是从缓存中获取的, 但第一次获取没有缓存, 第一次生成时需要修改参数: verify_ssl=False 之后就可不用修改
二、网站反爬顾忌: 误伤真实用户
爬虫爬取数据: 爬虫道德(尽量降低对方服务器负载,也可以保护自身)
反爬手段:
通过User-Agent来反爬, 使用faker模块
通过Referer来反爬, 在请求时添加Referer
通过Cookie来反爬, 携带cookie发送请求
通过js加密请求参数来反爬, python重写js代码的功能、或执行js代码拿到结果
通过行为验证来反爬, 使用打码平台或深度学习的方式破解验证码
通过ip地址来反爬, IP代理池、网上获取免费的代理ip
三、验证码的三种解决办法:
1. 手动打码:将验证码图片下载下来,手动打开并输入正确的验证码,提交请求参数。
2. OCR(光学字符识别系统):读取图片上的文字,并返回一个字符串(识别会有精确度问题)
# Google处理的 Tesseract OCR
3. 打码平台:将验证码图片上传给打码平台处理,打码平台返回验证结果(收费)
Python解释器(CPython解释器)拥有小整数对象池 : -5 ~ 256 之间 如果值相同则id相同, 比如终端执行python文件
IDE中的解释器做了优化处理,但凡是值一致,内存地址就一样
四、案例: 斗鱼直播爬取所有主播信息
"https://www.douyu.com/directory/all"
# 定位到 所有主播的大项
ul_element = xpath("//ul[@class='layout-Cover-list']")[1]
# 提取所有主播的每一个主播信息,并返回列表(一页120个)
div_list = ul_element.xpath('.//div[@class="DyListCover-content"]')
for div in div_list:
category_name = div.xpath(".//span[@class='DyListCover-zone']")[0]
room_name = div.xpath('.//h3[@class="DyListCover-intro"]')[0]
people_number = xpath('.//span[@class="DyListCover-hot"]')[0]
directory_name = xpath('.//h2[@class="DyListCover-user"]')[0]
五、案例: 人人网登陆
1. 发送GET请求: http://activity.renren.com/livecell/rKey
n = json.loads(response.content)['data']
2. 提供账户名和密码
phoneNum: mr_mao_hacker@163.com
password: ALARMCHIME
3. 执行js:
三个js文件: Bigint.js 、RSA.js 、Barrett.js
一段js代码:
'''
t.password = t.password.split("").reverse().join(""), setMaxDigits(130);
var o = new RSAKeyPair(n.e,"",n.n), r = encryptedString(o, t.password);
t.password = r, t.rKey = n.rkey'''
4. 提取js执行结果,获取 password 和 rkey 登录参数:
phoneNum: mr_mao_hacker@163.com
password: 83ac1c99378609e178cab3ece815d36c12b5ca094300333e83ea5436b6109fb2
c1: 0
rKey: 56c61d35789ce0326162a224b59725f3
5. 发送登录的POST请求: http://activity.renren.com/livecell/ajax/clog
六、 其他
python 强类型 动态 解释型语言
弱类型 静态 编译型语言
js : "hello" + 123 --> 弱类型: 字符串和整型可相加
动态:程序在运行时确定数据类型,创建变量不需要声明类型
静态:程序在运行前确定数据类型,创建变量必须声明类型
解释型语言: 程序执行时,通过解释器按行执行代码,实现不会检查整个代码的BUG,只有运行时才检查代码BUG
编译型语言: 程序执行前,先通过编译器生成 可执行文件(机器码文件),在编译过程中检查代码BUG,如果有BUG编译失败,如果编译成功,运行可执行文件即可。
运行速度:
4. 解释型语言(Python、Ruby、JS)
3. 编译型语言(C++、 Java、 C#)
2. C语言 代码映射汇编
1. 汇编代码 可以操作机器码,并通过助记词编写代码
0. 机器码 010101011100
Python自带的模块: /usr/lib/pythonx.x/
Python第三方的模块: /usr/local/lib/pythonx.x/site-packages/
/dist-packages/
Spider-three的更多相关文章
- spider RPC入门指南
本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...
- Scrapy:为spider指定pipeline
当一个Scrapy项目中有多个spider去爬取多个网站时,往往需要多个pipeline,这时就需要为每个spider指定其对应的pipeline. [通过程序来运行spider],可以通过修改配置s ...
- spider RPC过滤器
spider支持在请求执行前或完成后进行特殊处理,比如安全性检查.敏感字段混淆等等.为此,spider提供了BeforeFilter和AfterFilter.其执行位置如下图所示: 流水线插件配置在s ...
- spider RPC插件化体系
为了满足灵活扩展的需要,spider支持灵活的自定义插件扩展,从功能上来说,插件和过滤器的差别在于过滤器不会阻止请求的执行同时对于主程序不会有API上的影响(比如servlet 过滤器和监听器)(最多 ...
- spider RPC管理接口
为了在独立管理模式下尽可能的容易运行时排查问题,spider中间件提供了一系列restful api用于动态管理当前节点的路由,下游节点等.目前支持的RESTFUL API如下所示: 功能 服务号 R ...
- spider RPC高级特性
多租户 spider原生支持多租户部署,spider报文头对外开放了机构号.系统号两个属性用于支持多租户场景下的路由. 多租户场景下的路由可以支持下述几种模式: n 系统号: n 系统号+服务号( ...
- spider RPC安全性
spider提供了多重安全保障机制,目前主要支持接入握手校验,报文完整性校验,报文加密,报文长度检查四种机制. 接入认证 spider使用两次握手校验,其握手流程如下: 签名AES加密的方式实现. l ...
- spider RPC开发指南
协议与兼容性 spider使用java语言开发,使用Spring作为IoC容器,采用TCP/IP协议,在此基础上,结合SaaS系统模式的特性进行针对性和重点设计,以更加灵活和高效的满足多租户系统.高可 ...
- spider 配置文件参考
spider有一个配置文件spider.xml,为xml格式,spider.xml采用DTD进行管理,用于管理spider的所有特性.路由.高可用等. 配置文件支持三种不同的方式进行指定: 1. 通过 ...
- spider RPC性能测试报告
测试环境部署结构 测试用例 类 别 说明 请求报文 194字节({"systemId":"PL","appVersion":"qq ...
随机推荐
- JDK设计模式之——策略模式(Comparable和Comparator接口)
策略模式:其实就是java的多态...父类引用指向子类对象. 使用策略模式,改善排序算法上文中需要排序的是一个数组 让他可以对任何类型的数组进行排序 1.利用 接口 Comparable<T&g ...
- Web Components(续)
概述 之前我们介绍了Web Components的基本概念,现在我们给出一个使用Web Components的实例代码,并且对组件化进行一些思考.记录下来,供以后开发时参考,相信对其他人也有用. 实例 ...
- 【详记MySql问题大全集】一、安装MySql
最近公司要从SqlServer转到MySql,期间在安装环境和数据迁移的过程中,遇到了一些不大不小问题,比如怎么重置密码.怎么设置大小写敏感等等. 这些问题都比较细比较杂,这边解决完可能过几天就忘了, ...
- Kali学习笔记13:操作系统识别
为什么要扫描操作系统呢? 其实和上一篇博客:<服务扫描>类似,都是为了能够发现漏洞 发现什么漏洞? 不同的操作系统.相同操作系统不同版本,都存在着一些可以利用的漏洞 而且,不同的系统会默认 ...
- 【面试题】java中高以上必会技能
java基础 1.集合相关 1.1 java中常见的集合 答:Arraylist,LinkedList,ListedList,HashMap,HashSet. 1.2 arraylist和linked ...
- aaa配置(第十三组)
拓扑 网络情况 A PING B A PING C PC-B PING PC-C 2.R1的配置 a.console线 R1(config)#username admin1 password Admi ...
- python(leetcode)-重复元素算法题
leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...
- 阿里妈妈前端团队出品的开源接口管理工具RAP第二代 http://rap2.taobao.org
RAP2-DELOS 开源社区版本 (后端API服务器) 项目地址:https://github.com/thx/rap2-delos RAP2是在RAP1基础上重做的新项目,它包含两个组件(对应两个 ...
- C# 算法之选择排序
1.简介 选择排序是排序中比较简单的一种,实现的大致思路如下:首先我们拿到一个需要排序的数组,假设该数组的第一个元素是最小的,然后将数组中剩下的元素,于最小的元素进行比较,如果中间有比第一个元素的小的 ...
- mysql 开发进阶篇系列 18 MySQL Server(innodb_buffer_pool_size)
从这篇开始,讲innodb存储引擎中,对于几个重要的服务器参数配置.这些参数以innodb_xx 开头. 1. innodb_buffer_pool_size的设置 这个参数定义了innodb存储引擎 ...