目录
爬虫基础
1. 爬虫在使用场景中的分类
- 通用爬虫
- 聚焦爬虫
- 增量式爬虫
2. 爬虫的矛与盾 - 反爬机制
- 反反爬机制
爬虫程序可以制定相关的反反爬策略或者技术手段,破解门户网站的中具备的反爬机制,从而获取门户网站的数据。
反爬协议
-
robots.txt协议
规定了网站中哪些数据可以被爬虫爬取哪些,哪些不可以被爬取。 -
http协议(超文本传输协议)
–概念:就是服务器和客户端进行数据交互的一种形式。
–常用请求头信息:
User-Agent:请求载体的身份标识。(操作系统的版本、浏览器的版本、)
Connection:请求完毕后,是断开连接还是保持连接。
–常用响应头信息
Constent-Type:服务器相应客户端的数据类型。 -
https协议(安全的超文本传输协议)
-
加密方式:
–对称秘钥加密
–非对称秘钥加密
–证书秘钥加密
requests模块
- urlib模块
- requests模块
–requests模块作用:模拟浏览器发请求。
如何使用:
1. 制定url
-- UA伪装
-- 请求参数的处理
3. 发起请求
4. 获取响应数据
5. 持久化存储
环境的安装:(略)
爬取搜狗首页的页面数据
实战巩固
- 需求:爬取搜狗指定词条对应的搜索结果页面(简单的页面采集器。)
–UA检测
–UA伪装 - 需求:破解百度翻译
–post请求(携带了参数)
–响应数据是一组json数据 - 需求:爬取豆瓣电影分类排行榜————中的电影详情数据。
- 需求:爬取肯德基餐厅查询————指定地点的餐厅数。
- 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆产品生产许可证相关数据————
爬取搜狗指定词条对应的搜索结果页面(简单的页面采集器。)
抓包工具的使用:
右击网页空白处->审查元素->Network
破解百度翻译
获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才可以使用json())。 获取响应数据类型在content-type。
Ctrl+F可以对抓包工具中的响应数据检索
爬取豆瓣电影
import requests
import json
if __name__ == "__main__":
爬取肯德基餐厅查询
爬取国家药品监督管理总局相关数据
数据解析
应用于聚焦爬虫(爬取页面中指定的页面内容)。
数据解析的分类:
- 正则
- bs4(python独有的数据解析方式)
- xpath(***)
数据解析的原理:
- 解析的局部的文本内容都在标签之间或标签对应的属性中进行存储。
-
- 进行指定标签的定位。
-
- 提取标签或标签对应的属性中的数据。
在爬取过程中:
- text返回字符串
- content返回二进制文件
- json()返回对象类型
正则进行数据解析
bs4进行数据解析
- bs4数据解析的原理:
- 实例化一个BeatifulSoup对象,并且将页面源码数据加载到该对象中。
- 通过调用BeatifulSoup对象中相关的属性或者方法进行标签定位和数据提取。
- 环境安装:
1. pip install bs4
2. pip install lxml - 如何实例化BeatifulSoup对象:
1. from bs4 import BeautifulSoup
2. 对象的实例化:
– 将本地的html文档中的数据加载到该对象。
fp=open(’./test.html’, ‘r’, encoding=‘utf-8’)
soup=BeatifulSoup(fp, ‘lxml’)
– 将互联网上获取的页面源码加载到该对象中。
page_text=response.text
soup=BeatifulSoup(page_text, ‘lxml’)
3. 提供的用于数据解析的方法和属性:
– soup.tagName:返回的是文档中第一次出现的tagName对应的标签。
– soup.find():
– find(‘tagName’):等同于soup.div
– 属性定位:
– soup.find(‘div’, class_/id=‘song’)
– soup.find(‘div’, class_/id/attr=‘song’)
– soup.find_all():返回符合要求的所有标签(列表)
4. select:
– soup.select(‘某种选择器(id, class, 标签…选择器)’):返回是一个列表。
– 层级选择器:
– soup.select(’.tang > ul > li > a’):>表示一个层级
– soup.select(’.tang > ul a’):空格表示多个层级
4. 获取标签之间的文本数据:
– soup.a.text/ string/ get_text()
– text/ get_text():可以获取一个标签中所有的文本内容
– string:只可以获取该标签下直系的文本内容
– 获取标签中属性值:
– soup.a[‘href’]
xpath解析
xpath解析:最常用最便捷的一种解析方法,通用性佳。
– xpath解析原理:
1. 实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中。
2. 调用etree对象中xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
– 环境的安装:
– pip intsll xpath
– 如何实例化一个etree对象:from lxml import etree
1. 将本地的html文档中的源码数据加载到etree对象中:
etree.parse(filePath)
2. 可以从互联网上获取的源码数据加载到该对象中:
etree.HTML(‘page_text’)
3. xpath(‘xpath表达式’)
– xpath表达式
– / :表示的从根节点开始定位。表示的是一个层级。
– // :表示的是多个层级,可以从任意位置开始定位。
– 属性定位 😕/div[@class=‘sing’] tag[@attrName=“attrValue”]
– 索引定位 😕/div[@class=‘sing’] /p[3]索引是从1开始的。
– 取文本:
/text() 获取的是标签中直系的文本内容
//text() 获取的是非直系的文本内容(所有的文本内容)
– 取属性:
/@attrName ==>img/src 获取的是非直系的文本内容(所有的文本内容)
反反爬策略机制
反爬机制:
- 验证码(识别图片中的验证码,进行模拟登陆)。
识别验证码的操作:
1.1 肉眼识别
1.2 第三方自动识别: 云打码 - 代理(代理服务器)。
2.1. 代理的作用:
– 可以突破自身的IP访问的限制;
– 隐藏自身真实IP。
2.2. 代理相关的网站:
– 快代理
– 西祠代理
– www.gubanjia.com
模拟登陆
作用:需要获取某些用户的用户信息。(模拟登陆中的模拟,是指用request模块模拟浏览器登陆)
需求:对人人网进行模拟登陆。
–点击登录按钮后发起一个post请求。
–post请求会携带登录之前相关的登录信息(用户名、密码、验证码…)。
–验证码:每次请求后都会变化。