- 通用爬虫:
抓取系统重要组成部分。抓取的是一整张页面数据。 - 聚焦爬虫:
是建立在通用爬虫的基础之上。抓取的是页面中特定的局部内容。 - 增量式爬虫:
检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。
君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。url后面直接访问。
http协议
- 概念:就是服务器和客户端进行数据交互的一种形式。
常用请求头信息 - User-Agent:请求载体的身份标识
- Connection:请求完毕后,是断开连接还是保持连接
常用响应头信息
- Content-Type:服务器响应回客户端的数据类型
https协议:
- 安全的超文本传输协议
加密方式
- 对称秘钥加密
- 非对称秘钥加密
- 证书秘钥加密
python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
模拟浏览器发请求
(requests模块的编码流程)
- 指定url
- UA伪装
- 请求参数的处理
- 发起请求
- 获取响应数据
- 持久化存储
参数一般封装成字典
返回值response的属性⭐
- response.text 获取str类型(Unicode编码)的响应、html
- response.json Content-Type为json时,可以直接获取json
- response.content 获取bytes类型的响应、图片视频二进制文件
- response.status_code 获取响应状态码
- response.headers 获取响应头
- response.request 获取响应对应的请求
- response.cookies 获取ciookies
- 使用的cookie和session好处:很多网站必须登录之后(或者获取某种权限之后)才能能够请求到相关数据。
- 使用的cookie和session的弊端:一套cookie和session往往和一个用户对应.请求太快,请求次数太多,容易被服务器识别为爬虫,从而使账号收到损害。
- 不需要cookie的时候尽量不去使用cookie。为了获取登录之后的页面,我们必须发送带有cookies的请求,此时为了确保账号安全应该尽量降低数据
采集速度。
聚焦爬虫
正则
bs4
xpath
通过正则表达式匹配需要抓取的链接
爬30页糗事百科的video图片
Python特有,需要的包:bs4、lxml
步骤:
- 实例化BeautifulSoup对象,加载页面源码
- 使用BeautifulSoup对象中的方法或属性定位标签和提取数据
对象的实例化:
- 1.将本地的html文档中的数据加载到该对象中
- 2.将互联网上获取的页面源码加载到该对象中
提供的用于数据解析的方法和属性:
爬取三国演义所有章节
xpath解析原理:
- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
- 2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
如何实例化一个etree对象:from lxml import etree
- 1.将本地的html文档中的源码数据加载到etree对象中:
- 2.可以将从互联网上获取的源码数据加载到该对象中
xpath(‘xpath表达式’)
xpath表达式:
58二手房房源信息以及面积
4k美女图
注意中文的乱码问题,一般解决方法
- 1.直接response.encoding = ‘utf-8’ 看是否支持直接编码成utf-8
- 2.img_name.encode(‘iso-8859-1’).decode(‘gbk’) 编码再解码
获取全国城市
注意tree.xpath的书写,按位或 | 获取所有符合的列表数据
爬取 http://www.51pptmoban.com/的ppt模板
注意网站的跳转
验证码识别方法
- 人眼
- 第三方专业平台(云打码、超级鹰、斐斐打码等)
- tesseract-ocr实测效果差!智能识别英文
- 百度AI平台
- 自己orc训练识别模型,给接口使用
- 设置方法规避验证码
云打码识别,效果良好,金钱的力量!!
古诗文网验证码登录,主程序
YDMHttp类
斐斐打码自掏腰包实测很好用
tesseract-ocr识别效果细碎。。。
百度AI平台识别,通用文字识别(高精度版),精度还行偶尔缺失。。。。
四个字母只能识别出两三个,哭了
账号密码验证码模拟登录,古诗文网,使用斐斐打码
主程序
fateadm_api_py3
登录成功了!就可以拿cookie了!
- 手动处理:通过抓包工具获取cookie值,将该值封装到headers中。(不建议)
- 自动处理:新建session对象,session去请求之后,session里面包含cookie
代理的作用:
- 突破自身IP访问的限制。
- 隐藏自身真实IP
- 快代理
- 西祠代理
- www.goubanjia.com
- 代理ip的类型:
- http:应用到http协议对应的url中
- https:应用到https协议对应的url中
代理ip的匿名度:
- 透明:服务器知道该次请求使用了代理,也知道请求对应的真实ip
- 匿名:知道使用了代理,不知道真实ip
- 高匿:不知道使用了代理,更不知道真实的ip
有点难,,,稍后总结
selenium模块:便捷实现模拟登录,基于浏览器自动化的一个模块
使用流程
- 环境安装:pip install selenium
- 下载一个浏览器的驱动程序 (谷歌浏览器)
- 下载路径:http://chromedriver.storage.googleapis.com/index.html
- 驱动程序和浏览器的映射关系:http://blog.csdn.net/huilan_same/article/details/51896672 - 实例化一个浏览器对象
- 编写基于浏览器自动化的操作代码
- 发起请求:get(url)
- 标签定位:find系列的方法
- 标签交互:send_keys(‘xxx’)
- 执行js程序:excute_script(‘jsCode’)
- 前进,后退:back(),forward()
- 关闭浏览器:quit() - selenium处理iframe
- 1.如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
- 2.动作链(拖动):from selenium.webdriver import ActionChains
- action = ActionChains(bro):实例化一个动作链对象
- click_and_hold(div):长按且点击操作
- move_by_offset(x,y)
- perform() 让动作链立即执行
- action.release() 释放动作链对象