大数据——Python数据爬取

数据采集

  • 数据来源
    • 从网上爬取数据(crawling)
    • 从文件系统收集数据(scraping)
      • 文件、数据库等
  • 网络数据采集模型

在这里插入图片描述

常用数据爬取工具

  • 第三方库实现爬取
    • Requests、lxml
      • 灵活、简单
  • PySpider爬虫框架
    • 提供WebUI界面编写及管理爬虫
    • 上手快,学习简单
    • 对Windows操作系统支持很差
  • Scrapy爬虫框架
    • 功能强大
    • 可定制性强
    • 多线程,爬取效率高

安装配置Scrpy框架

  • 安装Scrapy
    • conda install scrapy
  • 配置Scrapy环境变量
    • 将Anaconda的Scripts文件夹加入到Path环境变量中
  • 创建Scrapy项目的命令
    • scrapy startproject 新工程名
  • 创建Spider
    • scrapy genspider 爬虫名 start_url
      • 修改parse()方法,在控制台输出文本
  • 启动Spider
    • scrapy crawl 爬虫名

在这里插入图片描述

Debug爬虫名称

  • 使用Python脚本执行命令行启动爬虫
    • 在项目根目录添加脚本文件
    • 调用Scrapy框架的命令行执行方法启动爬虫
      • cmdline模块
      • execute()方法
from scrapy.cmdline import execute
execute('scrapy crawl example_spider'.split())
  • 调试爬虫
    • 在parse()方法中设置断点
    • 使用Debug模式调试项目

Scrapy框架组成

  • spiders文件夹
    • 定义爬虫文件
  • items.py
    • 定义框架内数据传输格式
  • pipelines.py
    • 数据保存模块
  • middlewares.py
    • 中间件模块
  • settings.py
    • 框架配置模块
      在这里插入图片描述
      在这里插入图片描述

Scrapy返回爬取页面数据

  • 通过解析方法返回爬取页面数据
    • parse()方法response参数
    • response对象常用属性和方法
属性或方法作用
url当前返回数据所对应的页面url
statushttp请求状态码
meta用于request与response之间的数据传递
body返回页面html源码,如用纯正则表达式匹配数据需要获取页面HTML源码
xpath()使用xpath选择器解析网页
css()使用css选择器解析网页

在Scrapy爬虫框架中提取网页数据的方法

  • xpath选择器
    • 用于选择XML文档中的节点的语言,可以与HTML一起使用
  • css选择器
    • 用于将样式应用于HTML文档的语言
    • 将样式与特定的HTML元素相关联
  • 正则表达式
    • 提取非标签内容

xpath语法(一)

  • xpath
    • 使用路径表达式来选取XML文档中的节点或节点集
表达式描述
nodename选取的节点名
/从根节点选取
//选取所有符合条件的节点,而不考虑它们的位置
·选取当前节点
选取当前节点的父节点
@选取属性

路径表达式举例

路径表达式结果
/bookstore选取元素bookstore
/bookstore/book选取属于bookstore的子元素的所有book元素
//book选取所有book子元素,而不管它们在文档中的位置
/bookstore//book选取属于bookstore元素的后代的所有book元素,而不管它们位于bookstore之下的什么位置
//@lang选取名为lang的所有属性
/bookstore/book/text()选取属于bookstore的子元素的所有book元素的文本

xpath语法(二)

  • 谓语
    • 谓语用来查找某个特定节点或者包含某个指定的值的节点
    • 谓语被嵌在方括号中
路径表达式结果
/bookstore/book[1]选取属于bookstore子元素的第一个book元素
//title[@lang]选取所有拥有名为lang的属性的title元素
//title[@lang=‘eng’]选取所有拥有值为eng的lang属性的title元素

xpath选择器

  • Scrapy中xpath选择器
    • 基于lxml库
  • 获取选择器的网页数据
    • extract()
      • 提取selector列表中的网页数据
      • 如果列表为空,取下标为0的网页数据会抛出异常
    • extract_first()
      • 提取selector列表中下标为0的网页数据
      • 如果列表为空,不会抛出异常,返回None

爬取从页面提取的URL

  • 使用场景
    • 详情页爬取
    • 多层级目录爬取
  • 提取URL发起HTTP请求
    • 构造request对象
      • 指定HTTP请求的URL
      • 指定处理这个页面的回调方法
      • 关闭去重标记
    • 使用yield返回request对象
  • request与对应的response传递数据
    • meta字典

Scrapy的item模块

  • item的作用
    • 定义框架中的数据传输的形式
  • 定义item
    • 定义item类并继承scrapy.Item
    • 定义变量
      • 变量名
      • 变量类型
        • scrapy.Field()
  • 使用item
    • 使用字典的方式给item赋值
      • item[“变量名”]=赋值
  • 使用yield返回item

将爬取数据保存到文件中

  • Feed exports
    • 将数据导出成常用数据格式的方法
  • 默认支持的格式
    • JSON
    • JSON lines
    • CSV
    • XML
  • 使用Feed exports的方法
    • 在命令行使用-o来调对应的Feed exports
    • 在setting.py中配置Feed exports
FEED_FORMAT = 'CSV'
FEED_URI = ‘quotes.csv’

爬取动态网页

  • 查看动态网页代码
    • 按住F12返回的html结果
    • 鼠标右键查看页面源代码
      • 淘宝的商品详情页中的原始html中没有价格
  • 动态网页的特点
    • 渲染后的html源码和渲染前的html源码是不同的

在这里插入图片描述

网站反爬虫

  • 网站最主要的反爬虫原因
    • 不遵守规范的爬虫会影响网站的正常使用
  • 网站反爬虫的其他原因
    • 网站上的数据就就是公司的重要资产
    • 爬虫对网站的爬取会造成网站统计数据的污染
  • 网站反爬虫手段举例
    • 根据访问IP频率封禁IP
      • 一个IP某一个时刻访问频率太频繁,则封禁
    • 设置账号登录时长,账号访问过多封禁
    • 弹出数字验证码和图片确认验证码
    • 对API接口的限制

爬虫的反反爬策略

  • 反反爬的总体思想
    • 将爬虫伪装成自然人的浏览行为
  • 自然人浏览的特点
    • 访问频率不会非常的高
    • 使用的是浏览器进行访问
    • 网站设置登录要求后仍能正常使用
    • 可以完成验证操作
  • Scrapy反反爬功能实现
    • 爬虫配置settings.py
    • 爬虫框架中间件

模拟自然人访问频率

  • 配置settings.py控制爬虫爬取行为
    • 设置爬取间隔
    • 设置并发爬取量
  • 相关配置
配置默认值说明
DOWNLOAD_DELAY0单位秒,爬取间隔时间为(0.5~1.5)*DOWNLOAD_DELAY
CONCURRENT_REQUESTS_PER_DOMAIN16Scrapy downloader 并发请求的最大值
CONCURRENT_REQUESTS_PER_DOMAIN16对单个网站进行并发请求的最大值
CONCURRENT_REQUESTS_PER_IP0对单个IP进行并发请求的最大值

User Agent介绍

  • User Agent的本质

    • 一个特殊字符串头
  • User Agent的作用

    • 使服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
  • 查看浏览器UA的方法
    在这里插入图片描述

  • 查看Scrapy爬虫UA的方法

    • scrapy shell http://www.qq.com
    • request.headers

在这里插入图片描述

Scrapy设置随机UA

  • 建立user-agent池
    • 在每次发送request之前从agent池中随机选取一项设置request的User-Agent
  • 编写的UserAgent中间件的基类
    • 自定义RotateUserAgentMiddleware类
      • 继承UserAgentMiddleware
  • 设置settings.py文件设置相应的配置和属性
    • 在DOWNLOADER_MIDDLEWARES下配置中间件
      • 启用自定义UserAgent中间件
      • 禁用Scrapy默认的UserAgent中间件

Cookie的介绍

  • Cookie保存的位置
    • 总是保存在用户客户端浏览器中
  • Cookie的有效性
    • 最短的浏览器关闭后就消失了
    • 最长是可以一直保存,直到被删除
  • Cookie就是用来绕开HTTP的无状态性的
  • 服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器的状态
  • Cookie常用于保持用户登录状态

查看Cookie

  • 打开网页时请求中携带的Cookie
    在这里插入图片描述

  • 打开网页时服务器设置客户端的Cookie

在这里插入图片描述

使用Cookie使爬虫突破登录限制

  • 使用Cookie实现爬取需要登录的信息
    • 定义Cookie字符串
      • 在settings.py中定义DEFAULT_COOKIE字符串
    • 在构造request是设置Cookie属性
      • cookies=DEFAULT_COOKIE
  • 使用Cookie登录的优缺点
    • 优点:
      • 不需要知道登录url和表单字段以及其他参数
      • 不要频繁登录输入用户名和密码
    • 缺点:
      • Cookie有过期时间
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值