- 张晓波 15027900535 https://www.cnblogs.com/bobo-zhang/
- 爬虫:
- requests
- 基本使用
- 数据解析
- requets模块的高级
- 单线程+多任务异步协程
- selenium
- scrapy框架
- 常用且重要的功能
- 数据分析:
- numpy
- pandas
- matplotlib
- 爬虫day01
- 1.什么是爬虫?
- 就是通过编写程序模拟浏览器上网,然后让其去互联网上获取数据的过程
- 爬虫的分类:
- 通用爬虫:爬取的是一整张页面源码数据
- 聚焦爬虫:爬取页面中局部的内容.
- 关联:聚焦是建立在通用爬虫基础之上
- 增量式爬虫:
- 用来检测网站数据更新的情况,从而爬取到网站中最新更新出来的数据.
- 反爬机制:对应的载体是门户网站.网站中可以指定相关的机制防止爬虫程序对其网站中的数据进行爬取
- 反反爬策略:对应的载体是爬虫程序.爬虫程序可以破解网站采取的反爬机制,从而使得爬虫程序可以爬取到数据
- 第一个反爬机制:robots.txt协议
- User-Agent:请求载体的身份标识
- 特性:文本协议.防君子不防小人
- 2.requests模块
- 环境的安装:pip install requests
- requests作用:
- 用于模拟浏览器发起网络请求.requests模块可以帮助我们很好的实现爬虫
- requests的编码流程:
- 1.指定url
- 2.发起了请求
- 3.获取响应数据
- 4.持久化存储
- 参数动态化:get(params)
- UA伪装:get(headers)
- 注意:UA检测被应用在了绝大数的网站中,因此后续所有的需求中我们最好都应用下UA伪装操作
- 动态加载的数据:
- 是由另一个单独的请求请求到的数据
- 特性:可见非可得
- 如何鉴定一个网站中的相关数据是否为动态加载的数据?
- 使用抓包工具做局部搜索
- 可以搜索到:数据不是动态加载的
- 搜不到:是动态加载的
- 如何鉴定出数据为动态加载,如何捕获动态加载的数据呢?
- 在抓包工具中做全局搜索,从定位到的数据包中提取url和请求参数,对其进行请求发送即可
数据解析:
- 正则表达式
- bs4
- xpath
- 数据解析的通用原理
- 概念:数据解析就是将爬取到的页面源码中指定的内容进行提取
- 作用:用来实现聚焦爬虫(将页面中局部的数据进行提取)
- 原理:
- 页面中数据是存储在哪里的?
- 存在于某个标签之中
- 存在于标签的属性中
- 1.定位标签
- 2.数据的提取
- 正则表达式实现的数据解析
- 定位标签
- 数据的提取
- bs4解析
- 解析原理:
- 1.实例化一个BeautifulSoup的对象,然后把即将被解析的页面源码数据加载到该对象中
- 2.调用该对象中的相关方法和属性实现标签定位和数据的提取
- BeautifulSoup对象的实例化:
- BeautifulSoup(fp,'lxml'):将本地存储的html文档中的数据进行解析
- BeautifulSoup(page_text,'lxml'):将互联网请求到的页面源码数据进行解析
- lxml:一种解析器
- 环境的安装:
- pip install bs4
- pip install lxml
- 标签定位:
- soup.tagName:定位到第一次出现的tagName标签
- 属性定位find('tagName',attrName='value'),find只可以定位到符合要求的第一个标签
- find_all()
- select(选择器): id,class,tag,层级选择器(>表示一个层级,空格表示多个层级)
- 取文本
- text:获取的是标签下面所有的文本内容
- string:获取的标签的直系文本内容
- 取属性:
- tag[attrName]
- xpath解析
- 解析原理:
- 1.实例化一个etree类型的对象,把即将被解析的页面源码数据加载到该对象中
- 2.调用该对象中的xpath方法结合着不同形式的xpath表达式进行标签定位和数据提取
- etree对象的实例化
- etree.parse(filePath)
- etree.HTML(page_text)
- 环境的安装:
- pip install lxml
- html文档中标签是符合树状结构的
- 标签的定位:
#最左侧的/:表示xpath表达式必须从根节点进行标签定位
#非最左侧的/:表示一个层级
#最左侧是//:从任意位置进行标签定位
#非最左侧的//:多个层级
# print(tree.xpath('/html/head/title'))
# print(tree.xpath('/html//title'))
# print(tree.xpath('//title'))
- 取文本
- /text()
- //text()
- 取属性
- tag/@attrName
#属性定位://tag[@attrName="value"]
# print(tree.xpath('//div[@class="song"]'))
#索引定位:xpath中的索引是从1开始
# print(tree.xpath('//div[@class="tang"]/ul/li[1]'))
- 注意:xpath表达式的管道符的使用
- 作用:提升xpath表达式的通用性
xpath('//div/span/text() | //a/span/p/text()')
- 反爬机制:
- robots
- UA检测:UA伪装
- 动态加载数据的捕获:抓包工具的全局搜索
- 图片懒加载:伪属性(src2)
- 作业:
- 一种形式的全站数据的爬取:将网页中所有页码对应的数据进行爬取:http://sc.chinaz.com/jianli/free.html
- 站长素材中的免费简历模板进行爬取:前五页
- 下周六:
- requests的高级操作
- 验证码的识别
- 模拟登陆
- 代理
- cookie
- 线程池
- 单线程+_多任务异步协程(协程asycio)
- selenium